77

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

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

那么,任何人都可以解释或提供 Qt 定位机制的文章或来源吗?

我试图强制QLabel,QPushButtonQTableView,在他们的名字后面用下划线标记,比下面的QTextBrowser高两倍。verticalStretch = 1如何正确处理小部件的高度?

我在谷歌文档上的表单的 .ui 文件。在名称中搜索“____”,在 QtDesigner 中预览

4

3 回答 3

142

布局实际上很容易理解“我认为”。:)
可以在 QT 书籍“ C++ Gui Programming with QT 2nd edition ”中找到对布局的简单解释

关于布局及其尺寸政策您应该注意的事项

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

我建议(警告:我不是专家 :))您购买并阅读使用 QT 第 2 版进行 C++ Gui 编程”。我目前正在阅读它,这很有意义。查看图像,看看它们是否有意义。

解释规模政策
尺寸政策解释

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

例子

这是最小尺寸的预览。 替代文字

这是另一个更大尺寸的预览 替代文字

[编辑://添加大小提示示例]

为什么你应该关心 SIZEHINT
你可以看到每个小部件都有一个 sizeHint,这很重要,因为 QT 的布局系统总是尊重 sizeHint。如果小部件的默认大小不是您想要的,这只是一个问题。解决此问题的唯一方法是扩展(子类化)小部件并重新实现其sizeHint()成员函数。一个例子值 1000 字。为了节省空间,请参阅我的博客,其中有一个示例项目。

于 2011-01-12T18:29:16.817 回答
3

根据其文档

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

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

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

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

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

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

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

于 2020-04-29T08:59:35.420 回答
-3

您可以使用 QT 样式表以一种易于定制的方式控制小部件的高度和其他属性。

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

至于布局,您需要明智地使用它们并与垫片紧密结合,以使小部件的行为完全符合您的要求。

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

于 2010-12-29T13:10:27.897 回答