如何在Qt Designer中管理QSplitter

zar*_*zar 28 c++ qt qsplitter qt-creator qt-designer

当我按下一个按钮时,我会弹出一个用户选择的对话框并在结尾处按"确定".我想在这个对话框中有一个分割器.左侧窗格将显示树,右侧将显示其他内容.我该怎么做?

从Qt示例本身:

 QSplitter *splitter = new QSplitter(parent);
 QListView *listview = new QListView;
 QTreeView *treeview = new QTreeView;
 QTextEdit *textedit = new QTextEdit;
 splitter->addWidget(listview);
 splitter->addWidget(treeview);
 splitter->addWidget(textedit);
Run Code Online (Sandbox Code Playgroud)

因此,在此示例中,创建拆分器时没有任何对话框资源.如果我必须创建这种方式,那就意味着我必须在代码中创建所有控件而不是Qt Creator.

当我需要屏幕上的其他控件时,这样做的正确方法是什么?

Nej*_*jat 66

您可以在Qt Designer中创建包含项目的拆分器:

  1. 首先将小部件放在设计器中的对话框或小部件上(它们不应该在布局中)

  2. 选择要在拆分器中的小部件(通过按住CTL并单击它们)

  3. 右键单击选定的窗口小部件,然后从" 布局"菜单中选择"在拆分器中水平布局""在拆分器中垂直布局".

  4. 现在将网格布局应用于对话框,一切都应该没问题.你会在Object Inspector View中看到类似的东西:

在此输入图像描述

  • 看到这篇文章:http://stackoverflow.com/questions/25063003/how-to-initialize-the-splitter-handle-position-in-qt/25063164#25063164 (2认同)
  • 我无法让它工作,因为“在分离器中垂直布局”总是变暗的。我有一个带有centralWidget 的窗口,该窗口设置为垂直布局。在它下面我有两个布局;这是我想要在分离器下进行的两件事。我怀疑你的评论“它们不应该在布局中”是相关的 -centralWidget 的布局可能导致菜单项变暗(?)。但如果是这样:我如何让centralWidget忘记我告诉它使用垂直布局?我找不到办法去掉这个设置。我真的不想从头开始重新制作窗户! (2认同)

Jos*_*son 11

好吧,我知道这很古老,但这是完整的答案。

首先,在某种小部件容器中,将您的部件放入其中。对于我刚刚做的窗口,我有一个小部件作为我的窗口。我在里面放了两个小部件,标记为topContainerbottomContainer。然后,我将它们各自需要的所有小部件放入其中,并为它们提供了自己的布局。

然后不要选择主容器。选择要拆分的两个小部件。实际上,您是在它们上放置一个分离器,而不是在主容器上。因此,我转到小部件列表窗口并同时选择两者,然后右键单击对话框窗口,向下滚动到“布局”选项,并且“在拆分器中垂直布局”不会显示为灰色。选择它。

您仍然需要在主容器上进行布局。分离器不是布局。所以那时,我只是在主容器上放置了一个垂直布局。

重复一遍:您没有在容纳您要拆分的碎片的容器上设置布局。您正在选择要拆分的两个小部件并在它们周围添加一个 QSplitter。这就是让它发挥作用的技巧。