シグナルとシグナルハンドラ
概要
シグナルとシグナルハンドラによって各インスタンス間でメッセージをやりとりすることが出来る。はじめにシグナルとハンドラをconnect()によってコネクトする必要がある。一度コネクトすれば 何かイベントが起きるたびにシグナルが発せられてハンドラが呼び出される。下の例は前回と 同じくウィンドウ領域をクリックするとclickと表示する物であるが、シグナルとコネクトを 用いたバージョンとなっている。
ソース
sig2.cpp
#include <gtkmm.h>
#include <iostream>
class MainWin : public Gtk::Window
{
public:
MainWin();
private:
bool on_click( GdkEventButton* event );
};
MainWin::MainWin()
{
// OFFになってるボタンプレスイベントを追加
add_events( Gdk::BUTTON_PRESS_MASK );
// コネクト
signal_button_press_event().connect( sigc::mem_fun( *this, &MainWin::on_click ) );
}
// マウスクリック
bool MainWin::on_click( GdkEventButton* event )
{
std::cout << "click\n";
return true;
}
int main( int argc, char *argv[] )
{
Gtk::Main kit( argc, argv );
MainWin mainwin;
Gtk::Main::run( mainwin );
return 0;
}
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ sig2.cpp -o sig2 `pkg-config gtkmm-2.4 --cflags --libs`