【问题标题】:How to make a Gtk+ widget inside a GtkScrolledWindow to expand when packed into a GtkPane?如何在 GtkScrolledWindow 中制作 Gtk+ 小部件以在打包到 GtkPane 时展开?
【发布时间】:2012-09-21 15:37:52
【问题描述】:

我有一个程序,它显示两个 GtkTreeViews 包含在一个 GtkPaned 中(sscce: here):

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

结果如下:

但是,表格可以变得更大,所以我添加到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%?

【问题讨论】:

    标签: c gtk gtktreeview gtkscrolledwindow


    【解决方案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()。

    【讨论】:

    • 这也不起作用:我跑了a modified version of my examples,但窗口仍然折叠。
    • 在您的示例中,您没有设置窗口的整体大小,并且左窗格设置为较小的大小,因为字符串很短并且滚动策略未设置为自动。滚动条占显示字符串“left 1”和“left 2”所需宽度的很大百分比。试试this modified version of your paste
    • 还不错;随着您的更新,它确实有效。另一方面,当我将窗口调整为非常小的尺寸,然后将其调整为更大的尺寸时,第一个窗格的宽度保持较小。出于这个原因,我仍然使用我自己的半生不熟的解决方案,但您的解决方案也有效,特别是如果有人乐意忽略这些细节。
    【解决方案2】:

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

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

    正如预期的那样,结果是一个 800x600 的窗口:

    我不满意:这种方法依赖于任意大小,而且似乎过于“手动”。尽管如此,我还是想使用我的软件,所以我暂时采用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多