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-07-16(Sat)

イベントの処理

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

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

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


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20050716/p2