Top > Ruby > Qte > QPushButton
  • ウィンドウ上で何かをさせるボタンを配置しましょう。
  • ソースコードは 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
#!/usr/bin/env ruby
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)                        #外側の5ピクセル空け指定
      @label   = QLabel.new(tr("さんぷる"),    @mybox) #ラベル 配置
      @pushbtn = QPushButton.new(tr("押して"), @mybox) #ボタン1配置
      @endbtn  = QPushButton.new(tr("終了"),   @mybox) #ボタン2配置
  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
QPushButton_Sample.png

ボタンのクリックをきっかけに何かさせる

 ボタンを押した時に何かをさせるには、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
#!/usr/bin/env ruby
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)                        #外側の5ピクセル空け指定
      @label   = QLabel.new(tr("さんぷる"),    @mybox) #ラベル 配置
      @pushbtn = QPushButton.new(tr("押して"), @mybox) #ボタン1配置
        connect(@pushbtn, QSIGNAL("clicked()"), self, 'pushed')
      @endbtn  = QPushButton.new(tr("終了"), @mybox)   #ボタン2配置
        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 かを判断することで、「押して」ボタンが有効かどうかをプログラム側で判断することができます。

QButton.setEnabled(false).png

ボタンにアクセラレータ(ショートカットキー)を設定する

 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 ボタンに関連付け、と思いきや、動かないようです (^^;

添付ファイル: fileQPushButton_Sample.png 1031件 [詳細] fileQButton.setEnabled(false).png 658件 [詳細]

リロード   新規 下位ページ作成 凍結解除 差分 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Fri, 22 Jul 2011 21:57:56 JST (1525d)