イベントの処理
Ruby/Qteの勉強 その18
インスタンスに対してある決められた操作をした場合に、発生するイベントというのがある(らしい)
どんなイベントがあるかはQWidget Class ReferenceのProtected Membersの項目に載っている。といっても各サブクラスで全てのイベントが使用できるわけではないらしい。実際、ザウルス用に公開されているアプリのソースをみると、殆どはcloseEvent(Windowを閉じる時)とresizeEvent(インプット/ビュースタイル切り替え時)だった。
使用するには、そのクラスのinitialize()内に
catchEvent()
を記述してから、使用するイベントのメソッド?を作成する。
下の例では、ボタンを押すと表示するサブウィンドウ(QDialog派生クラス)での、closeEventとmoveEventについて記述してみた。closeEventはOK以外でのウィンドを閉じるときに、moveEventはペンでのドラッグによるウィンドウの移動時に発生する。moveEventは大量に発生するので、文字表示は.insertLineではなく、.setTextを使用。
#!/usr/bin/env ruby require "qte" require "qpe" include Qte include Qpe class SampleWindow < QMainWindow def initialize() super() setCaption(tr("サンプル")) @msg = QLabel.new(tr("これはサンプルプログラム"),self) @msg.setGeometry(10,10,300,30) $ebox1 = QMultiLineEdit.new(self) $ebox1.setGeometry(0,250,635,150) $ebox1.setReadOnly(true) @pb1 = QPushButton.new(tr("SubWindow"),self) @pb1.setGeometry(320,5,100,30) connect(@pb1,QSIGNAL("clicked()"), self, 'openSubWindow') end def openSubWindow $ebox1.clear sw = SubWindow.new(self) res = sw.exec() end end class SubWindow < QDialog def initialize(parent) super() setCaption(tr("サブウィンドウ")) setFixedSize(400,200) @pb = QPushButton.new(tr("閉じる"),self) @pb.setGeometry(150,85,100,30) connect(@pb,QSIGNAL("clicked()"), self, 'closeSubWindow') catchEvent() #キャッチイベント end def closeSubWindow close() end def closeEvent(e) #クローズイベント $ebox1.insertLine("close event") close() e.accept() #これが無いとクローズしない end def moveEvent(e) #ウィンドウ移動イベント $ebox1.setText("move event") 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