从 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));