3

我有一个程序,它显示两个GtkTreeViews 包装在一个GtkPanedsscce这里):

gtk_paned_add1(GTK_PANED(paned), tree_view1);
gtk_paned_add2(GTK_PANED(paned), tree_view2);

结果如下:

显示两个树视图的窗口

但是,表格可以变得更大,所以我添加了 then 到GtkScrolledWindows (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那么,在这种情况下,获得第一个屏幕截图 wen 外观的最佳方法是什么?另外,我可以定义窗格列的相对大小(例如,第一个为 30%,第二个为 70%?

4

2 回答 2

2

我一直在使用这种模式(如果有人发布了更好的答案,我会很高兴):

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()。

于 2012-09-25T22:19:58.397 回答
1

我采用的解决方案是实际设置滚动窗口的大小(sscce):

gtk_widget_set_size_request(scrolled_window1, 200, 600);
gtk_widget_set_size_request(scrolled_window2, 600, 600);

正如人们所料,结果是一个 800x600 的窗口:

一个尺寸很好的窗户

我不满意:这种方法依赖于任意大小,而且看起来太“手动”了。尽管如此,我想使用我的软件,所以我现在将采用它。

于 2012-09-28T20:17:38.090 回答