C++界面开发框架Qt 6.x入门指南 - Qt Widget布局管理(三)

Qt布局系统提供了一种简单而强大的方式来自动排列小部件内的子小部件,以确保它们充分利用可用空间。

Qt技术交流群:166830288      欢迎一起进群讨论

点击获取Qt组件下载

将小部件添加到布局

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

  1. 所有小部件最初将根据它们的QWidget::sizePolicy() 和 QWidget::sizeHint()分配一定数量的空间。
  2. 如果任何小部件设置了拉伸因素,其值大于零,则它们将按其拉伸因素的比例分配空间(如下所述)。
  3. 如果任何小部件的拉伸因素设置为零,则只有在没有其他小部件想要空间的情况下,它们才会获得更多空间。 其中,空间首先分配给具有扩展大小策略的小部件。
  4. 分配的空间小于其最小尺寸(或最小尺寸提示,如果没有指定最小尺寸)的任何小部件都被分配了它们所需的最小尺寸。 (小部件不必有最小尺寸或最小尺寸提示,在这种情况下,拉伸因素是它们的决定因素。)
  5. 分配的空间超过其最大尺寸的任何小部件都将分配它们所需的最大尺寸空间。 (小部件不必有最大尺寸,在这种情况下,拉伸因素是它们的决定因素。)

拉伸因素

小部件通常是在没有设置任何拉伸因素的情况下创建的,当它们在布局中布局时,根据QWidget::sizePolicy() 或它们的最小尺寸提示,以较大者为准,为这些小部件分配空间份额。拉伸因素用于更改按比例分配的小部件的空间量。

如果使用没有设置拉伸因素的QHBoxLayout 布局了三个小部件,将得到如下布局:

如果我们对每个小部件应用拉伸因素,它们将按比例排列(但绝不会小于它们的最小尺寸提示),例如:

布局中的自定义小部件

当您创建自己的小部件类时,还应该传达其布局属性。 如果小部件使用 Qt 布局当中的一个,这已经被处理了。如果小部件没有任何子小部件,或者使用手动布局,您可以使用以下任何或所有机制更改小部件的操作:

  • 重新实现 QWidget::sizeHint()以返回小部件的首选大小。
  • 重新实现QWidget::minimumSizeHint() 以返回小部件可以具有的最小尺寸。
  • 调用QWidget::setSizePolicy() 来指定小部件的空间要求。

每当尺寸提示、最小尺寸提示或尺寸政策发生变化时,调用 QWidget::updateGeometry(),这会导致重新计算布局,多次连续调用 QWidget::updateGeometry() 只会导致一次布局重新计算。

如果您的小部件的首选高度取决于其实际宽度(例如,具有自动分词的标签),请在小部件的大小策略中设置height-for-width 标志并重新实现 QWidget::heightForWidth()。

即使你实现了 QWidget::heightForWidth(),提供一个合理的 sizeHint() 仍然是个好主意。

布局问题

在标签小部件中使用富文本可能会给其父小部件的布局带来一些问题,当标签是自动换行时,Qt 的布局管理器处理富文本的方式会出现问题。

在某些情况下,父布局被置于 QLayout::FreeResize 模式,这意味着它不会调整其内容的布局以适应小尺寸窗口,甚至阻止用户使窗口太小而无法使用,这可以通过子类化有问题的小部件并实现合适的 sizeHint() 和 minimumSizeHint() 函数来克服。

在某些情况下,将布局添加到小部件时是相关的。 当您设置 QDockWidget 或 QScrollArea 的小部件时(使用 QDockWidget::setWidget() 和 QScrollArea::setWidget()),布局必须已经在小部件上设置。 如果没有,小部件将不可见。

Qt商用组件推荐

  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanNavigation:QtitanNavigationDesignUI 组件是一组 GUI 控件,它实现了菜单、导航框、命令栏等导航界面,并让您以更少的滚动和点击次数有效地查看所有实体(工作区、网格或其他项目)。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

Qt技术交流群:166830288      欢迎一起进群讨论

更多Qt产品教程、下载、正版授权资讯,请点击获取

你可能感兴趣的:(qt,c++,开发语言,布局)