c - Gtk+Glade : widgets using same signal handler. 如何区分它们?

标签 c gtk glade

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

我想可以用 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/

相关文章:

无法在以 null 结尾的字符串上运行 printf()

Python:SWIG:包装对结构的访问

c - 初始化结构体数组

gtk - Glade treeview liststore数据不可见,无法想象为什么

c - Gtk 和 gtk builder 显示不同的版本

c++ - 使用 Glade 和 gtkmm 对 GTK+ 对象进行内存管理

c++ - 父类方法中不兼容的 cv 限定符

c++ - 什么时候修改链表?

c - 最近的 GTK 3.22 是否仍然对 Boehm GC 友好(线程问题)?

c - 无法在 gtk3 c 程序中连接来自 Glade 的回调函数