9个按钮的单个处理程序(gtkmm-2,libsigc ++)

时间:2012-03-28 14:12:55

标签: gtk signals gtkmm libsigc++

我尝试制作一个带有9个切换按钮(3行和3列)的小部件,用户应该可以选择其中之一。所以我写了 9个事件处理程序,它禁用了当前选中的按钮并存储了选择。

我只想知道是否有任何方法将这9个切换按钮连接到一个处理程序,如果有办法知道哪个按钮发出信号。类似于QT的东西

QObject::sender()

这样可以避免我的代码中出现大量重复。如标题中所述,我使用的是gtkmm版本2,当然还有sigc ++。

谢谢你的建议

2 个答案:

答案 0 :(得分:3)

我使用c ++ 11 lambdas来解决类似的问题。基本上你捕获有关lambda中目标的信息,所以当信号触发时你可以做一些特定的目标。例如:

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

我相信这将适用于gtkmm 2.x,但我只使用它与3.0,我不知道sigc ++如何在两个版本之间发生变化。如果您不能使用c ++ 11功能,您可能可以使用sigc ++附带的lambda功能执行类似操作,但我没有使用它的经验。

答案 1 :(得分:2)

我对gtkmm并不熟悉,但在普通的C GTK中,信号处理程序看起来像这样:

void on_button_toggled (GtkToggleButton *button, gpointer user_data);

button指针是QT术语中的“发件人”。要找出哪个按钮,您可以为其命名,或使用g_object_set_data()附加数据。