【问题标题】:Qt layout is larger than it should beQt 布局大于应有的大小
【发布时间】:2012-04-28 08:37:11
【问题描述】:

我有一个在 Qt 中设计得很好的布局,但是当我单击父窗口并将其设置为网格布局时,一切都变得很不稳定。我已经阅读了我能找到的所有教程以及 Qt 设计器手册,只是无法弄清楚为什么会发生这种情况。我附上了一个屏幕截图来显示问题:

如您所见,左侧的垂直布局坚持比其包含的子级更宽。 label 和 treeview 都设置为 sizePolicy 最大值,最大宽度设置为 260px。孩子们自己保持正确的大小,但包含它们的垂直布局却没有。

中间的垂直布局设置为展开,最右侧的设置与左侧的设置相同,只有一个似乎可以使用。如何使第一个垂直布局符合它的孩子的宽度?

另外,如果我可以偷偷问第二个问题,我在右下角的选项卡小部件内有一个 QTextEdit,但它不会填满以占用完整选项卡视图的空间。您在屏幕截图中看不到这一点,但如果我将 tabview 拉起,其中的 textedit 不会随之拉伸。如何使它符合标签的大小?它已经设置为 sizePolicy 扩展,但这似乎没有帮助。

【问题讨论】:

  • 关于第二个问题,您是否尝试过将尺寸政策设置为“MinimumExpanding”?
  • 是的,很遗憾我已经尝试了所有设置。这越来越令人沮丧。制作这个简单的布局应该不会比为编辑器编写代码花费的时间更长。

标签: qt qt-designer


【解决方案1】:

问题很可能是您需要尝试“拉伸”布局。 Stretch 设置布局单元格彼此之间的关系。默认为0,表示不发生拉伸。

在您的情况下,我相信您希望将第一列(第 0 列)的拉伸设置为 0,将第二列和第三列的拉伸设置为 1。这意味着第一列将始终与可能,第二列和第三列会尽量等宽。

您可以很容易地以编程方式设置拉伸;例如,将第一列设置为拉伸 0:

layout->setColumnStretch(0, 0);

在 Qt Designer 中,您可以像访问任何普通属性一样访问列和行延伸。

【讨论】:

  • 其实我说错了,第二列和第三列是垂直拆分器,我没有意识到拆分器没有继承布局。如果我卸下分离器,一切正常。但我想把它们放在那里。我将第一列的布局设置为拉伸 0,并将中间列拆分器设置为扩展,但这似乎不起作用。理想情况下,我希望将三列放在水平拆分器中,但那时事情真的很不稳定。有没有办法仍然使用分离器?文档很糟糕。
  • @John 对于 QSplitter 有一个函数“setStretchFactor”,我相信它会做你想做的事。我不知道它是否可以从 Qt Designer 访问。我自己实际上并不使用 Qt Designer。坏消息是,如果您想要这种功能,您可能必须以编程方式布置所有内容。好消息是它并不像听起来那么困难。
  • 我终于明白了。你的回答是正确的。拆分器的拉伸在尺寸控制之下。我必须将中间拆分器的拉伸设置为 2,将外部拆分器的拉伸设置为 0。秘密是拆分器内的所有子项也必须设置为 2。看起来我仍然' 需要在代码中设置 splitter 的位置,但我现在有了一个可行的 UI。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多