了解 Qt 中的表单布局机制

问题描述 投票:0回答:3

Qt
具有灵活而强大的布局机制来处理桌面应用程序窗口的视图。

但它是如此灵活,以至于当出现问题并需要微调时,它几乎无法被理解。而且如此强大,以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人。

那么,谁能解释一下,或者提供一下Qt的定位机制的文章或者来源吗?

我试图强制

QLabel
QPushButton
QTableView
(在名称中用下划线标记)比下面有
QTextBrowser
verticalStretch = 1
高两倍。如何正确处理小部件的高度?

qt qt4 qt-designer
3个回答
151
投票

布局实际上很容易理解“我认为”。 :)
关于布局的简单解释可以在QT书籍《C++ Guiprogramming with QT 2nd Edition

中找到

关于布局及其尺寸政策您应该注意什么

  • 大多数 Qt 小部件都有大小策略。此大小策略告诉系统小部件应如何拉伸或收缩。它来自 QSizePolicy 类。规模政策具有垂直和水平组成部分。
  • 大多数小部件也有尺寸提示。这个尺寸提示告诉系统小部件的首选尺寸
  • QSizePolicy 有一个拉伸因子,允许小部件以不同的速率增长
**我只熟悉4个尺寸政策**
  • 固定大小策略 - 小部件的大小是固定的,无法拉伸。它保持其尺寸提示。
  • 最小尺寸策略 - 尺寸提示是小部件的最小可能尺寸,但如果需要,它_仍然可以_变大。
  • 首选尺寸策略 - 小部件可以缩小或变大,超过其尺寸提示。
  • 扩展尺寸策略 - 小部件可以缩小或变大超过其尺寸提示:)
您可能想问, 首选和扩展有什么区别? **答案:** 想象一个带有 2 个小部件的表单,一个带有首选小部件,另一个带有扩展小部件。然后,任何额外的空间都将被分配给具有扩展策略的小部件。具有首选策略的小部件将保持其大小提示。

我推荐(警告:我不是专家:))您购买并阅读C++ Gui 编程与 QT 第二版”。我目前正在阅读它,它很有意义。看看这些图像,看看它们是否有意义。

解释尺寸政策
Size policy explained

一个简单的例子
这是一个简单的对话框,有 2 个按钮,其水平和垂直尺寸策略显示为水平和垂直拉伸。

example

这是最小尺寸的预览。 alt text

这是另一个更大尺寸的预览 alt text

[编辑://添加尺寸提示示例]

为什么您应该关心 SIZEHINT
您可以看到每个小部件都有一个 sizeHint,这至关重要,因为 QT 的布局系统始终尊重 sizeHint。仅当小部件的默认大小不完全符合您的要求时,这才会出现问题。解决此问题的唯一方法是扩展(子类化)小部件并重新实现其

sizeHint()
成员函数。一个例子相当于1000字。为了节省空间,请参阅我的博客,其中有一个示例项目。


3
投票

根据其文档

将小部件添加到布局时,布局过程如下:

  1. 所有小部件最初都会根据它们的 QWidget::sizePolicy() 和 QWidget::sizeHint() 分配一定的空间量。

  2. 如果任何小部件设置了拉伸因子,且值大于零,则它们将按照其拉伸因子的比例分配空间(如下所述)。

  3. 如果任何小部件的拉伸因子设置为零,则只有在没有其他小部件需要空间时,它们才会获得更多空间。其中,空间首先分配给具有扩展大小策略的小部件。

  4. 任何分配的空间小于其最小大小(如果未指定最小大小,则为最小大小提示)的小部件都会分配它们所需的最小大小。 (小部件不必具有最小尺寸或最小尺寸提示,在这种情况下,拉伸因子是它们的决定因素。)

  5. 任何分配的空间超过其最大大小的小部件都会分配它们所需的最大大小空间。 (小部件不必具有最大尺寸,在这种情况下,拉伸因子是它们的决定因素。)

并且

sizeHint()
是 QWidget 的推荐大小,父级 widget 的
Layout
将考虑
sizeHint()
sizePolicy()
来确定子级 widget 可以容纳的空间。


-4
投票

您可以使用QT样式表来控制小部件的高度 以及其他属性以简单的可定制方式。

http://doc.qt.io/archives/qt-4.7/stylesheet.html

对于布局,你需要明智而有力地使用它们 与垫片结合以使小部件表现良好 正是您想要的方式。

http://doc.qt.io/archives/qt-4.7/designer-layouts.html

© www.soinside.com 2019 - 2024. All rights reserved.