我尝试制作一个带有9个切换按钮(3行和3列)的小部件,用户应该可以选择其中之一。所以我写了 9个事件处理程序,它禁用了当前选中的按钮并存储了选择。
我只想知道是否有任何方法将这9个切换按钮连接到一个处理程序,如果有办法知道哪个按钮发出信号。类似于QT的东西
QObject::sender()
这样可以避免我的代码中出现大量重复。如标题中所述,我使用的是gtkmm版本2,当然还有sigc ++。
谢谢你的建议
答案 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()
附加数据。