- ウィンドウ上で何かをさせるボタンを配置しましょう。
- ソースコードは utf-8 前提です。
- 動作確認環境 : Ruby 1.8.4 + rubyqte 0.5.3
ボタンを配置してみる
 とりあえず、ボタンを配置する方法はラベルと同じで、QLabel を QPushButton に置き換えるだけです。ただ、これだと配置しただけで動かないボタンです。タップやスペースキー押下等でボタンを押したことにしても、何も起こりません。
16, 17行目がボタン生成を行っている部分で、QPushButton.new(ボタンの表示名,親ウィジェット) という呼び方をしています。
|   0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 |  | require 'qte'
require 'qpe'
 
include Qte
include Qpe
 
class MainWindow < QMainWindow
  def initialize
    super
    self.setCaption(tr("(9) QPushButton さんぷる"))
    @mybox    = QVBox.new(self)
      self.setCentralWidget(@mybox) 
      @mybox.setMargin(5)                              @label   = QLabel.new(tr("さんぷる"),    @mybox)       @pushbtn = QPushButton.new(tr("押して"), @mybox)       @endbtn  = QPushButton.new(tr("終了"),   @mybox)   end
end
 
class MyApplication < QPEApplication
  def initialize
    super([$0]+ARGV)
    self.setDefaultCodec(QTextCodec::codecForName("utf-8"))
  end
end
 
app = MyApplication.new
win = MainWindow.new()
app.showMainWidget(win)
app.exec
 | 
ボタンのクリックをきっかけに何かさせる
 ボタンを押した時に何かをさせるには、connect(ボタンの変数名, QSIGNAL("clicked()"), self, 実行するべきメソッド) という書式を用います。
下のコードの場合、17行目で @pushbtn のクリック時に pushed メソッドを呼ぶように、19行目で @endbtn のクリック時に quit メソッドを呼ぶようになっています。
- pushed メソッドは 22~24行目、@label 表示が さんぷるが「押して」が押されたよに切り替わります。
- quit メソッドは 26~28行目、exit = プログラム終了 となります。
|   0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 |  | require 'qte'
require 'qpe'
 
include Qte
include Qpe
 
class MainWindow < QMainWindow
  def initialize
    super
    self.setCaption(tr("(9) QPushButton さんぷる"))
    @mybox    = QVBox.new(self)
      self.setCentralWidget(@mybox) 
      @mybox.setMargin(5)                              @label   = QLabel.new(tr("さんぷる"),    @mybox)       @pushbtn = QPushButton.new(tr("押して"), @mybox)         connect(@pushbtn, QSIGNAL("clicked()"), self, 'pushed')
      @endbtn  = QPushButton.new(tr("終了"), @mybox)           connect(@endbtn, QSIGNAL("clicked()"), self, 'quit')
  end
 
  def pushed
    @label.setText(tr("「押して」が押されたよ"))
  end
 
  def quit
    exit
  end
end
 
class MyApplication < QPEApplication
  def initialize
    super([$0]+ARGV)
    self.setDefaultCodec(QTextCodec::codecForName("utf-8"))
  end
end
 
app = MyApplication.new
win = MainWindow.new()
app.showMainWidget(win)
app.exec
 | 
ボタンをグレーアウトする
 「押して」ボタンは何度クリックしても @label 表示は 「押して」が押されたよ のままです。このようなボタンの場合は、1度クリックされたら無効状態(グレーアウト)にしたいですよね。そのような場合は、.setEnabled(論理値) を呼び出すことで実現できます。
 今回のケースの場合は、def pushed と end の間に @pushbtn.setEnabled(false) を入れておけば、2度目以降にタップされることはありません。逆にグレーアウトの解除を行うには、setEnabled(true) とすればいいです。
 グレーアウトしているか否かは .isEnabled をつけることで判断できます。例えば、 @pushbtn.isEnabled が true か false かを判断することで、「押して」ボタンが有効かどうかをプログラム側で判断することができます。
ボタンにアクセラレータ(ショートカットキー)を設定する
 Windows や Qt では、ボタンのラベルとして (&A) を含めておけば自動的に ALT+A がショートカットキーに設定されるのですが、Zaurus には残念ながら ALT に相当するキーがありません (KeyHelper を使えば別かもしれません)。そんなわけで、アクセラレータを設定しましょう。
 アクセラレータは .setAccel(キーの組み合わせ) で定義できます。キーの組み合わせについては公式のキーコード資料 (PDF、SL-B500/SL-C700 用ですが、SL-C 系であれば流用可能と思われます) にあります。
(PDF、SL-B500/SL-C700 用ですが、SL-C 系であれば流用可能と思われます) にあります。
- .setAccel(Qt::Key_P) で P キーが直接ボタンに割り当てられます。
- Qt::Key_A ~ Qt::Key_Z で A~Zキーになるようです。
 
- Fn + ○ の組み合わせについては資料がないようです。
- Fn+A なら 0x2017 といったような定数で決め打ちするしかなさそうです。
- Fn+○のキーコードについては、軽く一覧表にしてみましたが、内容が正確かどうかは保証しません。
 
- .setAccel(Qt::Key_F33) は OK ボタンに関連付け、と思いきや、動かないようです  