Qt
具有灵活而强大的布局机制来处理桌面应用程序窗口的视图。
但它是如此灵活,以至于当出现问题并需要微调时几乎无法理解。如此强大,以至于它可以击败任何人试图压倒 Qt 对表单外观的看法。
那么,任何人都可以解释或提供 Qt 定位机制的文章或来源吗?
我试图强制 QLabel
、QPushButton
和 QTableView
(在其名称中用下划线标记)比 QTextBrowser
高两倍,下面有 verticalStretch = 1
。如何正确处理小部件的高度?
.ui file of my form on google docs. Search '____' in names, preview in QtDesigner
布局实际上很容易理解“我认为”。 :)
可以在 QT 书籍“C++ Gui programming with QT 2nd edition”中找到布局的简单说明
关于布局及其尺寸政策您应该注意的事项
大多数 Qt 小部件都有大小策略。此尺寸策略告诉系统小部件应如何拉伸或收缩。它来自 QSizePolicy 类。大小策略既有垂直分量也有水平分量。
大多数小部件也有大小提示。此尺寸提示告诉系统小部件首选尺寸
QSizePolicy 有一个拉伸因子,允许小部件以不同的速率增长
固定尺寸政策 - 小部件的尺寸是固定的,不能拉伸。它仍然保持其大小提示。
最小尺寸策略 - 尺寸提示是小部件的最小可能尺寸,但如果需要,它仍然可以变大。
首选大小策略 - 小部件可以缩小或增长大于其大小提示。
扩展尺寸策略 - 小部件可以缩小或增大到大于其尺寸提示 :)
我建议(警告:我不是专家 :))您购买并通读“C++ Gui programming with QT 2nd edition”。我目前正在阅读它,这很有意义。查看图像,看看它们是否有意义。
https://i.stack.imgur.com/Y8IDK.png
一个简单的例子 这是一个带有 2 个按钮的简单对话框,其水平和垂直尺寸策略显示为水平和垂直拉伸。
https://i.stack.imgur.com/zVFRD.png
https://i.stack.imgur.com/5XQ5C.png
https://i.stack.imgur.com/2XOBK.png
[编辑://添加大小提示示例]
为什么你应该关心 SIZEHINT
你可以看到每个小部件都有一个 sizeHint,这是至关重要的,因为 QT 的布局系统总是尊重 sizeHint。如果小部件的默认大小不是您想要的,这只是一个问题。解决此问题的唯一方法是扩展(子类化)小部件并重新实现其 sizeHint()
成员函数。一个例子值 1000 字。为了节省空间,请参阅我的博客,其中有一个示例项目。
根据其docs:
当您将小部件添加到布局时,布局过程如下:所有小部件最初将根据它们的 QWidget::sizePolicy() 和 QWidget::sizeHint() 分配一定数量的空间。如果任何小部件设置了拉伸因子,其值大于零,则它们将按其拉伸因子的比例分配空间(如下所述)。如果任何小部件的拉伸因子设置为零,则只有在没有其他小部件想要空间的情况下,它们才会获得更多空间。其中,空间首先分配给具有扩展大小策略的小部件。分配的空间小于其最小尺寸(或最小尺寸提示,如果没有指定最小尺寸)的任何小部件都被分配了它们所需的最小尺寸。 (小部件不必有最小尺寸或最小尺寸提示,在这种情况下,拉伸因子是它们的决定因素。)任何分配的空间大于其最大尺寸的小部件都会分配它们所需的最大尺寸空间。 (小部件不必有最大尺寸,在这种情况下,拉伸因子是它们的决定因素。)
而 sizeHint()
是 QWidget 的推荐大小,widget 父级的 Layout
将考虑 sizeHint()
和 sizePolicy()
来确定子 widget 可以容纳的空间。
您可以使用 QT 样式表以一种易于定制的方式控制小部件的高度和其他属性。
http://doc.qt.io/archives/qt-4.7/stylesheet.html
至于布局,您需要明智地使用它们并与垫片紧密结合,以使小部件的行为完全符合您的要求。
http://doc.qt.io/archives/qt-4.7/designer-layouts.html