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 | 06 | 07 | 08 | 10 |
2018 | 02 | 03 | 04 |
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 | 06 | 07 | 08 | 10 |
2018 | 02 | 03 | 04 |
cpp
|
excel |
go言語 |
java |
js |
python |
powershell
|
ruby |
vba |
prog |
windows |
linux |
ipod |
pc |
zaurus |
rubytk |
vruby |
qt |
soft |
book |
雑記
2005-09-12(Mon)
キーイベントの取得
ここに話題があったので試してみました。前回のプログラムに追加してみる。
画面をタップすると座標を表示、その後カーソルキー操作で数字が移動していきます。
keyPressEventはQKeyが渡されてくるので、ここ(e.key)からキーコードを取得してカーソルキーの場合がキーに応じた移動量をQPointオブジェクト@movePosに保存して、新規に作成したシグナル@pressedでシグナルを発生させる。メイン側のメソッドmovePosはこのシグナルを受けて@movePosに応じた量だけ移動を行っています。
ちなみにkeyPressEventはメイン側(クラスSampleWindow)に置いても同様の動作をしました、この場合はforcusPolicyの設定がなくても動作しました。FieldView上にkeyPressEventを置いた場合はこのオブジェクト上にフォーカスが無いと動作しないという意味?
#!/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("タップした位置に座標を表示\nフィールドをタップしてからカーソルキー操作をしてみる"),self) @msg.setGeometry(0,0,640,100) @field = QCanvas.new( 640, 310 ) # キャンバス作成 @fieldView = FieldView.new( @field, self) # 表示枠作成 @fieldView.setGeometry(0,100,640,350) connect(@fieldView.tapped, self, 'dispPos') connect(@fieldView.pressed, self, 'movePos') @text = QCanvasText.new(@field) catchEvent end def dispPos x = @fieldView.penPos.x y = @fieldView.penPos.y @text.move(x, y) @text.setText("X=#{x}, Y=#{y}") # 座標から文字列作成 @text.show @field.update # フィールド更新 end def movePos x = @text.x + @fieldView.movePos.x # 現在の位置+移動量 y = @text.y + @fieldView.movePos.y @text.move(x.to_i, y.to_i) @text.setText("X=#{x.to_i}, Y=#{y.to_i}") # to_iは整数型にするため @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) # @movePos = QPoint.new(0, 0) # 座標オブジェクト作成 @tapped = RSignal.new # @pressed = RSignal.new # 新規シグナル作成 setFocusPolicy( StrongFocus ) # これが無いとkeyPressEvent動作しない catchEvent end attr_reader :tapped # 外部から読み取り可能にする attr_reader :penPos attr_reader :pressed attr_reader :movePos def keyPressEvent(e) # カーソルキーの入力に応じた移動量を設定 x = 0 y = 0 # p e.key # keycode確認 case e.key when Qt::Key_Up y = -10 when Qt::Key_Down y = 10 when Qt::Key_Left x = -10 when Qt::Key_Right x = 10 end @movePos.setX(x) # 移動量設定 @movePos.setY(y) @pressed.send # キープレスでシグナル送信 end # 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/20050912/p2
リンク元
- 154 https://www.google.co.jp/
- 64 http://hake.syuriken.jp/ruby/index.html
- 19 http://www.google.co.jp/url?sa=t&rct=j&q=qt キー 取得&source=web&cd=5&ved=0CEIQFjAE&url=http://d.hatena.ne.jp/hake/20050912/p2&ei=o2sZT43KN4_omAWk_4WQCg&usg=AFQjCNHvvQ2QB_efWpncZ4EA3dUYWRfy0g&sig2=iCO--Q86
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFIQFjAA&url=http://d.hatena.ne.jp/hake/20050912/p2&ei=6pEOUK68J9CTiAfF2oGoAw&usg=AFQjCNHvvQ2QB_efWpncZ4EA3dUYWRfy0g
- 17 http://www.google.co.jp/url?sa=t&rct=j&q=qt+キーイベント&source=web&cd=35&ved=0CDgQFjAEOB4&url=http://d.hatena.ne.jp/hake/20050912/p2&ei=FTjTTqivIubXmAWAj-naDQ&usg=AFQjCNHvvQ2QB_efWpncZ4EA3dUYWRfy0g
- 14 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP:official_s&q=Qt+キーイベント&btnG=Google+検索&lr=
- 12 http://d.hatena.ne.jp/keyworddiary/Ruby
- 12 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=21&ved=0CG4QFjAAOBQ&url=http://d.hatena.ne.jp/hake/20050912/p2&ei=URyzT7__EOTImQXgupWdBQ&usg=AFQjCNHvvQ2QB_efWpncZ4EA3dUYWRfy0g&sig2=uKzPWs3oectha2eHtYtG1A
- 11 http://hake.syuriken.jp/ruby/
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=30&ved=0CIUBEBYwCTgU&url=http://d.hatena.ne.jp/hake/20050912/p2&ei=ibAiUK-hDIeUiAfX4oDYAQ&usg=AFQjCNHvvQ2QB_efWpncZ4EA3dUYWRfy0g&sig2=Up7X5THIdxFpBuRuFCX2tg