1

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

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

QObject::sender()

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

谢谢你的建议

4

2 回答 2

3

我使用 c++11 lambdas 来解决类似的问题。基本上,您在 lambda 中捕获有关目标的信息,因此当信号触发时,您可以执行特定于目标的操作。例如:

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

我相信这将适用于 gtkmm 2.x,但我只在 3.0 中使用过它,我不知道 sigc++ 在两个版本之间有何变化。如果您不能使用 c++11 功能,您也许可以使用 sigc++ 附带的 lambda 功能做类似的事情,但我没有这方面的经验。

于 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 回答