Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 |

2005-09-01(Thu)

座標の取得とシグナルの発生

Ruby/Qte勉強 その29

画面のCanvasViewのフィールド内をタップすると、その場所に座標を表示します。元ネタは前回と同じくここで殆どそのまんまのスクリプトです。


前回と同様に内部のメソッド?の上書きを行うためにQCanvasViewではなくQRCanvasViewを使用。このクラスの中でシグナル用?のオブジェクト@tappedを作成して、画面をタップされたイベントcontentsMousePressEventでシグナルを発生させている(と思う)

タップされた座標はQPointのオブジェクト@penPosに保持される。

シグナルを受け取ったメソッドdispPosではQCanvasTextのオブジェクト@textをタップされた位置に移動、座標を表示させている。

#!/usr/bin/env ruby

require "qte"
require "qpe"
require "qtecanvas"      # 追加

include Qte
include Qpe
include Qtecanvas        # 追加


class SampleWindow < QMainWindow
   def initialize()
      super()
      setCaption(tr("サンプル"))
      @msg = QLabel.new(tr("タップした位置に座標を表示"),self)
      @msg.setGeometry(0,0,310,35)

      @field = QCanvas.new( 640, 310 )              # キャンバス作成
      @fieldView = FieldView.new( @field, self)     # 表示枠作成
      @fieldView.setGeometry(0,100,640,350)

      connect(@fieldView.tapped, self, 'dispPos')

      @text = QCanvasText.new(@field)
   end

   def dispPos
#      @text = QCanvasText.new(@field)
      x = @fieldView.penPos.x
      y = @fieldView.penPos.y
      @text.move(x, y)
      @text.setText("X=#{x}, Y=#{y}")    # 座標から文字列作成
      @text.show
      @field.update                      # フィールド更新
   end
end

class FieldView < QRCanvasView    # QCanvasViewではない
   def initialize(field, parent = nil, name = '')
      super(field, parent, name)
      @penPos = QPoint.new(0, 0)  # 座標オブジェクト作成
      @tapped = RSignal.new       # 新規シグナル作成?
      catchEvent
   end

   attr_reader :tapped   # 外部から読み取り可能にする
   attr_reader :penPos

   # QScrollViewのProtecedMember
   def contentsMousePressEvent(e)
      @penPos.setX(contentsX + e.x)     # contentsX が不明
      @penPos.setY(contentsY + e.y)
      @tapped.send                      # タップイベントでシグナル送信?
   end
end

$defaultCodec = QTextCodec.codecForName("utf8")
app = QPEApplication.new([$0]+ARGV)
app.setDefaultCodec($defaultCodec)
QApplication.setFont(QFont.new("lcfont",18))
app.showMainWidget(SampleWindow.new)
app.exec

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20050901/p1