现在我有一个包含许多执行类似行为的按钮的窗口,所以很自然地为它们使用相同的信号处理程序。但是,在信号发生之后,我不能彼此区别开来。是的,我有指向对象的指针,但我不知道它是第一个按钮,第二个按钮还是其他东西。
我认为glade中的'Name'属性(我将其设置为'togglebutton1')可以通过gtk_widget_get_name
函数获得,但我错了,我得到了'GtkToggleButton'。 xml文件说:<object class="GtkToggleButton" id="togglebutton1">
。
那么无论如何都要使用'id'属性,还是有更好的解决方案来识别按钮?非常感谢。
答案 0 :(得分:3)
您获得类似“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兼容。