C 为什么在向笔记本添加页面时必须调用“gtk_show_widget”?

C 为什么在向笔记本添加页面时必须调用“gtk_show_widget”?,c,widget,gtk,C,Widget,Gtk,我以前使用过QT,刚开始使用GTK+。我一直在努力为笔记本添加页面 static void button_clicked ( GtkWidget *widget, gpointer data ) { GtkWidget *notebook = GTK_WIDGET(data); GtkWidget *list = createListView(); GtkWidget *label = gtk_label_new("New list"); gtk_notebook

我以前使用过QT,刚开始使用GTK+。我一直在努力为笔记本添加页面

static void
button_clicked ( GtkWidget *widget, gpointer data ) {
    GtkWidget *notebook = GTK_WIDGET(data);
    GtkWidget *list = createListView();
    GtkWidget *label = gtk_label_new("New list");
    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), list, label);
}
过了一段时间,我试图“显示”小部件,它工作了。附加的
gtk_小部件_显示(列表)到函数,一切都正常工作


我习惯了,将小部件添加到容器意味着在这个容器中显示它。为什么在将
gtk\u widget\u show
(在gtk+中)添加到笔记本后,我还必须调用它?

文档中是否有这样的说明?我不这么认为。事实上,在您将小部件添加到容器后,您可以在容器本身上调用
gtk\u widget\u show\u all
,以在每个子容器上调用
gtk\u widget\u show
。这是否意味着gtk对象只会隐藏(隐式)?或者是其他原因?我认为是这样做的,因为这样子部件的位置和大小就不需要在每次添加部件时重新计算,所以当您调用
gtk\u widget\u show\u all
时,所有布局只需执行一次。但这只是一个假设。Gtk小部件在默认情况下确实是隐藏的。这基本上是一个工具包设计错误,在不破坏现有代码负载的情况下无法真正修复。隐藏小部件本身(并且让它们不参与大小请求)的能力是一个很好的特性——这只是默认特性,既不直观又烦人。