我有以下MWE時:GtkTreeView不顯示所有行的GtkBox
#include <gtk/gtk.h>
//#define USE_BOX
int main(int argc, char *argv[]) {
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkTreeStore *ts = gtk_tree_store_new(1, G_TYPE_STRING);
GtkWidget *tv = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ts));
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes(
GTK_TREE_VIEW(tv), -1, "title", renderer, "text", 0, NULL
);
gtk_window_set_default_size(GTK_WINDOW(window), 500, 400);
#ifdef USE_BOX
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
GtkWidget *label = gtk_label_new("label");
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), tv, FALSE, FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), box);
gtk_widget_show(label);
gtk_widget_show(box);
#else
gtk_container_add(GTK_CONTAINER(window), tv);
#endif
GtkTreeIter iter;
GtkTreeIter subiter;
gtk_tree_store_append(ts, &iter, NULL);
gtk_tree_store_set(ts, &iter, 0, "1", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "1.1", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "1.2", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "1.3", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "1.4", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "1.5", -1);
gtk_tree_store_append(ts, &iter, NULL);
gtk_tree_store_set(ts, &iter, 0, "2", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "2.1", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "2.2", -1);
gtk_tree_store_append(ts, &subiter, &iter);
gtk_tree_store_set(ts, &subiter, 0, "2.3", -1);
gtk_widget_show(tv);
gtk_widget_show(window);
gtk_main();
return 0;
}
現在,在這個代碼,如果USE_BOX
沒有(在上面)定義,那麼一切正常。但是,如果我們定義USE_BOX
使得GtkTreeView被放置在GtkBox,那麼我們有以下問題:
起初,窗口看起來正常:
但是,當我點擊「三角」旁邊的‘1’展開行,一些孩子(以及‘2’行)是缺少:
我有什麼期望它顯示(即behav iour不用時放在GtkBox):
上午我在這裏做得不對,或這是GTK +某種錯誤的?
我試過使用GtkGrid而不是GtkBox,但結果是一樣的。但是,在這兩種情況下,如果我在「1」行之前展開「2」行,則一切都按預期工作。
如果它的事項,我用下面的編譯文件:
gcc -g -std=c99 -Wall -Wpedantic `pkg-config --cflags gtk+-3.0 gmodule-2.0` ./mwe.c -o ./mwe `pkg-config --libs gtk+-3.0 gmodule-2.0`
哇。其實只需將樹視圖放入滾動窗口即可解決。 (我想這是因爲樹視圖會填滿滾動窗口的所有空間。)非常感謝。 – ace 2015-02-08 18:29:35
將GtkScrolledWindow放入另一個GtkBox後,'expand'和'fill'位仍然很重要。 (或者,您可以在滾動窗口本身設置「hexpand」,「halign」,「vexpand」和「valign」屬性;所有GtkWidgets都有這些屬性。) – andlabs 2015-02-09 00:12:30