现在我有一个窗口,其中包含许多执行类似行为的按钮,因此很自然地为它们使用相同的信号处理程序。但是,在信号发生后,我无法将它们彼此区分开来。是的,我有指向该对象的指针,但我不知道它是第一个按钮、第二个按钮还是其他东西。
我想可以用 gtk_widget_get_name
获得 glade 中的“名称”属性(我将其设置为“togglebutton1”)函数,但我错了,我得到的是“GtkToggleButton”。 xml 文件显示:<object class="GtkToggleButton" id="togglebutton1">
.
那么有没有办法利用“id”属性,或者有没有更好的解决方案来识别这些按钮?非常感谢。
最佳答案
你得到像“GTKToggleButton”这样的值的原因是因为你没有使用 gtk_widget_set_name
手动设置名称。根据 GTK 文档:
Widget names are the type of the widget by default (e.g. "GtkButton") or can be set to an application-specific value with 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 兼容。
关于c - Gtk+Glade : widgets using same signal handler. 如何区分它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250549/