如何在GtkScrolled内部创建一个Gtk +小部件,以便在打包到GtkPane时进行扩展?

时间:2012-09-21 15:37:53

标签: c gtk gtktreeview gtkscrolledwindow

我有一个程序,显示在GtkTreeViewGtkPanedsscce)内打包了两个here

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

结果如下:

Window presenting the two tree views

但是,表格可能会变大,所以我添加到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);

然而,现在窗口坍塌到了几乎是恍惚状态,如下面的屏幕截图所示:

Insanely small window

如果我最大化窗口,则不会出现第一列(虽然我可以手动展开它):

The first table does not appear

那么,在这种情况下,使用GtkScrolledWindows获取第一个屏幕截图的最佳方法是什么?另外,我可以定义窗格列相对于彼此的大小(例如,第一个窗口列为30%,第二个窗口列值为70%?

2 个答案:

答案 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的窗口:

A window with good dimentions

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