我有一个vcontainer,其中填充了gtk_combo_box和几个按钮 我想只在vcontainer中清除按钮,我尝试了以下代码:
GList *vcontainer_children, *iter;
vcontainer_children = gtk_container_get_children(GTK_CONTAINER(container));
for(iter = vcontainer_children; iter != NULL; iter = g_list_next(iter))
{
if (gtk_button_get_label(iter));
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
代码清除vcontainer中的所有小部件,一种可能性是将if替换为检查iter是否为按钮的函数,但我不知道如何完成
答案 0 :(得分:1)
if (gtk_button_get_label(iter));
最后的分号是错误的;这与说
相同 if (gtk_button_get_label(iter))
/* do nothing */;
因此gtk_widget_destroy()
总是运行。
只需删除分号或切换为使用大括号(或其他一些我没想到的选项)。
由于两个原因你的病情也是错误的。首先,它使用iter
代替iter->data
。其次,如果小部件不是按钮,它将会崩溃和燃烧。幸运的是,您可以使用宏GTK_IS_BUTTON()
:
if (GTK_IS_BUTTON(iter->data))
gtk_widget_destroy(GTK_WIDGET(iter->data));