我有以下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