[QtRuby] QtRuby入門2(シグナルとスロット)
Qt独自の機構であるシグナルとスロットをQtRubyで定義する方法をメモっておこうじゃなイカ
1. シグナル
シグナルの定義
signals 'hoge()'
文字列として定義することさえ覚えておけば、あとはQtと同じ書き方じゃないかな?
シグナルの発行
emit hoge()
たぶんQtと同じ。
2. スロット
スロットの定義
slots 'fuga()'
これも文字列として定義すればよく、あとは基本的にQtと同じと思われ。
fugaメソッドの定義は通常のメソッドと同じ。
3. シグナルとスロットのサンプル
シグナルとスロットのサンプルとして、次のようなものを作ってみた。
サンプル
samplesignalslot.rb
require 'qt4' $KCODE = "utf-8" class MainWindow < Qt::MainWindow signals 'nullpo()' # 「ぬるぽ」シグナル slots 'ga()' # 「ガッ」スロット slots 'buttonClickedEvent()' def initialize super @count = 0 setCentralWidget(Qt::Widget.new) resize(100, 50) vboxlayout = Qt::VBoxLayout.new vboxlayout.setAlignment(Qt::AlignVCenter) centralWidget.setLayout(vboxlayout) @label = Qt::Label.new @label.setText(@count.to_s) @label.setAlignment(Qt::AlignHCenter) vboxlayout.addWidget(@label) @button = Qt::PushButton.new("NEXT") vboxlayout.addWidget(@button) connect(@button, SIGNAL('clicked()'),\ self, SLOT('buttonClickedEvent()')) # 「ぬるぽ」シグナルと「ガッ」スロットをコネクト connect(self, SIGNAL('nullpo()'), self, SLOT('ga()')) end private # ボタンが押された時の処理 def buttonClickedEvent @count += 1 @label.setText(@count.to_s) # 3の倍数の時に「ぬるぽ」する if @count % 3 == 0 emit nullpo # 「ぬるぽ」シグナルの発行 end end # 「ガッ」ってする def ga @label.setText("ガッ") end end app = Qt::Application.new(ARGV) w = MainWindow.new w.show app.exec
普通のメソッドとQt独特のシグナル・スロットの使い分けなんて理解してないけど、定義して使うのは簡単だね。