- ウィンドウ上で何かをさせるボタンを配置しましょう。
- ソースコードは 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 系であれば流用可能と思われます) にあります。
- .setAccel(Qt::Key_P) で P キーが直接ボタンに割り当てられます。
- Qt::Key_A ~ Qt::Key_Z で A~Zキーになるようです。
- Fn + ○ の組み合わせについては資料がないようです。
- Fn+A なら 0x2017 といったような定数で決め打ちするしかなさそうです。
- Fn+○のキーコードについては、軽く一覧表にしてみましたが、内容が正確かどうかは保証しません。
- .setAccel(Qt::Key_F33) は OK ボタンに関連付け、と思いきや、動かないようです