c-Gtk+Glade:使用相同信号处理程序的小部件.如何将它们区别开来



现在我有了一个包含许多按钮的窗口,这些按钮执行类似的行为,因此自然会对它们使用相同的信号处理程序。但是,信号发生后,我无法将它们区别开来。是的,我有指向对象的指针,但我不知道它是第一个按钮、第二个按钮还是其他什么。

我以为glade中的"Name"属性(我把它设置为"togglebutton1")可以用gtk_widget_get_name函数获得,但我错了,我得到了"GtkToggleButton"。xml文件显示:<object class="GtkToggleButton" id="togglebutton1">

那么,有没有办法利用"id"属性,或者有没有更好的解决方案来识别这些按钮?非常感谢。

返回类似"GTKToggleButton"的值的原因是您没有使用gtk_widget_set_name手动设置名称。根据GTK文件:

小部件名称是默认情况下的小部件类型(例如"GtkButton"),也可以使用gtk_Widget_set_name()设置为特定于应用程序的值。

因此,使用gtk_widget_set_name为按钮创建自定义名称,如果需要在对象之间进行更具体的区分,请使用gtk_widget_path获取对象的完整路径名称。即,它将返回完整的窗口层次结构,允许您区分不同窗口中类似名称的按钮,或允许您按其父窗口名称对按钮进行分组,等等。

编辑:您还可以使用gtk_buildable_get_name从XML UI定义文件中获取小部件的实际ID值。因此,如果您想避免使用gtk_widget_set_name,这是另一个选项。我假设您的XML UI定义与GTKBuilder兼容。

最新更新