我有一个程序,显示在GtkTreeView
(GtkPaned
:sscce)内打包了两个here:
gtk_paned_add1(GTK_PANED(paned), tree_view1);
gtk_paned_add2(GTK_PANED(paned), tree_view2);
结果如下:
但是,表格可能会变大,所以我添加到GtkScrolledWindow
s(sscce:here):
GtkWidget *scrolled_window1 = gtk_scrolled_window_new(NULL, NULL),
*scrolled_window2 = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(scrolled_window1), tree_view1);
gtk_container_add(GTK_CONTAINER(scrolled_window2), tree_view2);
gtk_paned_add1(GTK_PANED(paned), scrolled_window1);
gtk_paned_add2(GTK_PANED(paned), scrolled_window2);
然而,现在窗口坍塌到了几乎是恍惚状态,如下面的屏幕截图所示:
如果我最大化窗口,则不会出现第一列(虽然我可以手动展开它):
那么,在这种情况下,使用GtkScrolledWindows
获取第一个屏幕截图的最佳方法是什么?另外,我可以定义窗格列相对于彼此的大小(例如,第一个窗口列为30%,第二个窗口列值为70%?
答案 0 :(得分:1)
我一直在使用这种模式(如果有人发布了更好的答案,我会很高兴):
GtkWidget* treeView_, pane1_;
// [Removed code to create and show the widget heirarchy.]
GtkRequisition sizeReq;
gtk_widget_size_request(treeView_, &sizeReq); // get tree's preferred size
gtk_paned_set_position(GTK_PANED(pane1_), sizeReq.width);
这非常接近,但你可能会有一个带有一些隐藏像素的水平滚动条。由于我们的应用程序会记住用户对窗格位置的调整,因此只需要看起来足够好"在初始布局上。
此外,还需要gtk_widget_size_request()返回有意义的内容。就我而言,我在检索大小请求之前在层次结构上调用了gtk_widget_show_all()。
答案 1 :(得分:1)
我采用的解决方案是实际设置滚动窗口的大小(sscce):
gtk_widget_set_size_request(scrolled_window1, 200, 600);
gtk_widget_set_size_request(scrolled_window2, 600, 600);
正如人们所料,结果是一个800x600的窗口:
我不满意:这种方法依赖于任意大小,看起来太“手动”了。尽管如此,我想使用我的软件,所以我现在就采用它。