从 vcontainer 中销毁按钮
destroying buttons from a vcontainer
我有一个装有 gtk_combo_box 和几个按钮的 vcontainer
我只想从 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 是否为按钮的函数,但我不知道这是如何完成的
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));
我有一个装有 gtk_combo_box 和几个按钮的 vcontainer 我只想从 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 是否为按钮的函数,但我不知道这是如何完成的
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));