1

9 つのトグル ボタン(3 行と 3 列)を持つウィジェットを作成しようとしています。ユーザーはそのうちの 1 つを選択できます。そこで、現在選択されているボタンを無効にして選択を保存する9 つのイベント ハンドラーを作成しました。

これらの 9 つのトグル ボタンを 1 つのハンドラーに接続する方法があるかどうか、およびどのボタンがシグナルを発したかを知る方法があるかどうかを知りたかっただけです。QTに似たもの

QObject::sender()

これにより、私のコードで多くの繰り返しが回避されます。タイトルにあるように、私は gtkmm バージョン 2 ともちろん sigc++ を使用しています。

アドバイスありがとう

4

2 に答える 2

3

同様の問題を解決するために c++11 ラムダを使用しました。基本的に、ラムダでターゲットに関する情報をキャプチャするため、信号が発火したときにターゲット固有の何かを行うことができます。例えば:

abutton.signal_clicked().connect([this,&abutton]{ handle_click(abutton); });

これは gtkmm 2.x で動作すると思いますが、3.0 でしか使用したことがなく、2 つのバージョン間で sigc++ がどのように変化したかはわかりません。C++11 の機能が使えない場合は、sigc++ に付属のラムダ機能で同様のことができるかもしれませんが、私は経験がありません。

于 2012-03-28T22:46:32.630 に答える
2

私は gtkmm にはあまり詳しくありませんが、単純な C GTK では、シグナル ハンドラーは次のようになります。

void on_button_toggled (GtkToggleButton *button, gpointer user_data);

buttonポインターは、QT 用語の「送信者」です。どのボタンがどれであるかを調べるには、名前を付けるか、 でデータを添付しますg_object_set_data()

于 2012-03-28T18:54:38.070 に答える