QSizePolicy Class
QSizePolicy 类是一个描述水平和垂直调整大小策略的布局属性。更多内容...
| 头文件: | #include <QSizePolicy> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
公共类型
| enum | ControlType { DefaultType, ButtonBox, CheckBox, ComboBox, Frame, …, ToolButton } |
| flags | ControlTypes |
| enum | Policy { Fixed, Minimum, Maximum, Preferred, Expanding, …, Ignored } |
| enum | PolicyFlag { GrowFlag, ExpandFlag, ShrinkFlag, IgnoreFlag } |
公共函数
| QSizePolicy() | |
| QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType) | |
| QSizePolicy::ControlType | controlType() const |
| Qt::Orientations | expandingDirections() const |
| bool | hasHeightForWidth() const |
| bool | hasWidthForHeight() const |
| QSizePolicy::Policy | horizontalPolicy() const |
| int | horizontalStretch() const |
| bool | retainSizeWhenHidden() const |
| void | setControlType(QSizePolicy::ControlType type) |
| void | setHeightForWidth(bool dependent) |
| void | setHorizontalPolicy(QSizePolicy::Policy policy) |
| void | setHorizontalStretch(int stretchFactor) |
| void | setRetainSizeWhenHidden(bool retainSize) |
| void | setVerticalPolicy(QSizePolicy::Policy policy) |
| void | setVerticalStretch(int stretchFactor) |
| void | setWidthForHeight(bool dependent) |
| void | transpose() |
| QSizePolicy | transposed() const |
| QSizePolicy::Policy | verticalPolicy() const |
| int | verticalStretch() const |
| operator QVariant() const | |
| bool | operator!=(const QSizePolicy &other) const |
| bool | operator==(const QSizePolicy &other) const |
相关的非成员
| size_t | qHash(QSizePolicy key, size_t seed = 0) |
| QDataStream & | operator<<(QDataStream &stream, const QSizePolicy &policy) |
| QDataStream & | operator>>(QDataStream &stream, QSizePolicy &policy) |
详细说明
控件的大小策略体现了其对各种调整大小的接受程度,并影响布局引擎对该控件的处理方式。每个控件都会返回一个 QSizePolicy 对象,该对象描述了控件在布局时所偏好的水平和垂直调整大小策略。您可以通过修改特定控件的QWidget::sizePolicy 属性来更改其大小策略。
QSizePolicy 包含两个独立的 `QSizePolicy::Policy ` 值和两个拉伸因子;其中一个描述控件的水平尺寸策略,另一个描述其垂直尺寸策略。它还包含一个标志,用于指示其首选尺寸的高度和宽度是否相关。
水平和垂直策略可在构造函数中设置,并可通过setHorizontalPolicy()和setVerticalPolicy()函数进行修改。 拉伸因子可通过setHorizontalStretch()和setVerticalStretch()函数进行设置。指示控件的sizeHint()是否依赖于宽度(例如菜单栏或自动换行的标签)的标志,可通过setHeightForWidth()函数进行设置。
可通过horizontalPolicy()、verticalPolicy()、horizontalStretch() 和verticalStretch() 函数获取当前的大小策略和拉伸因子。此外,也可使用transpose() 函数交换水平和垂直策略及拉伸因子。hasHeightForWidth() 函数返回指示大小提示依赖关系的标志的当前状态。
使用expandingDirections() 函数可确定关联的小部件能否使用比其sizeHint() 函数所指示的更多空间,并查明它可以在哪些方向上扩展。
最后,QSizePolicy 类提供了用于将该尺寸策略与给定策略进行比较的运算符,以及一个QVariant 运算符,用于将该 QSizePolicy 存储为QVariant 对象。
另请参阅 QSize 、QWidget::sizeHint()、QWidget::sizePolicy 以及QLayoutItem::sizeHint()。
成员类型文档
enum QSizePolicy::ControlType
flags QSizePolicy::ControlTypes
该枚举根据布局交互情况指定了不同类型的控件:
| 常量 | 值 | 描述 |
|---|---|---|
QSizePolicy::DefaultType | 0x00000001 | 默认类型,当未指定时使用。 |
QSizePolicy::ButtonBox | 0x00000002 | 一个 `QDialogButtonBox ` 实例。 |
QSizePolicy::CheckBox | 0x00000004 | 一个QCheckBox 实例。 |
QSizePolicy::ComboBox | 0x00000008 | 一个QComboBox 实例。 |
QSizePolicy::Frame | 0x00000010 | 一个QFrame 实例。 |
QSizePolicy::GroupBox | 0x00000020 | 一个QGroupBox 实例。 |
QSizePolicy::Label | 0x00000040 | 一个QLabel 实例。 |
QSizePolicy::Line | 0x00000080 | 一个QFrame 实例,其QFrame::HLine 或QFrame::VLine 。 |
QSizePolicy::LineEdit | 0x00000100 | 一个QLineEdit 实例。 |
QSizePolicy::PushButton | 0x00000200 | 一个QPushButton 实例。 |
QSizePolicy::RadioButton | 0x00000400 | 一个QRadioButton 实例。 |
QSizePolicy::Slider | 0x00000800 | 一个QAbstractSlider 实例。 |
QSizePolicy::SpinBox | 0x00001000 | 一个QAbstractSpinBox 实例。 |
QSizePolicy::TabWidget | 0x00002000 | 一个QTabWidget 实例。 |
QSizePolicy::ToolButton | 0x00004000 | 一个QToolButton 实例。 |
ControlTypes 类型是QFlags<ControlType> 的 typedef。它存储 ControlType 值的“或”组合。
另请参阅 setControlType() 和controlType()。
enum QSizePolicy::Policy
此枚举描述了在构建QSizePolicy 时使用的各种按维度划分的尺寸类型。
| 常量 | 值 | 描述 |
|---|---|---|
QSizePolicy::Fixed | 0 | QWidget::sizeHint() 是唯一可接受的选项,因此该控件绝不会扩大或缩小(例如,按钮的垂直方向)。 |
QSizePolicy::Minimum | GrowFlag | sizeHint() 给出的尺寸是最低限度的,但已足够。该小部件可以扩展,但尺寸更大并无好处(例如,按钮的水平方向)。其尺寸不能小于 sizeHint() 提供的尺寸。 |
QSizePolicy::Maximum | ShrinkFlag | sizeHint() 表示最大尺寸。如果其他控件需要空间(例如分隔线),则该控件可以任意缩小而不会造成影响。其尺寸不能大于 sizeHint() 提供的尺寸。 |
QSizePolicy::Preferred | GrowFlag | ShrinkFlag | sizeHint() 提供的尺寸最为理想,但控件即使缩小仍可正常使用。控件可以扩展,但超过 sizeHint() 提供的尺寸并无益处(这是默认的“QWidget ”策略)。 |
QSizePolicy::Expanding | GrowFlag | ShrinkFlag | ExpandFlag | sizeHint() 给出的尺寸合理,但小部件可以缩小且仍能正常使用。小部件可以利用额外的空间,因此应尽可能获得更多空间(例如水平滑块的水平方向)。 |
QSizePolicy::MinimumExpanding | GrowFlag | ExpandFlag | sizeHint() 值最小且足够。控件可以利用额外空间,因此应尽可能多地获取空间(例如水平滑块的水平方向)。 |
QSizePolicy::Ignored | ShrinkFlag | GrowFlag | IgnoreFlag | sizeHint() 被忽略。控件将获取尽可能多的空间。 |
另请参阅 PolicyFlag 、setHorizontalPolicy() 以及setVerticalPolicy()。
enum QSizePolicy::PolicyFlag
这些标志组合在一起,形成了各种Policy 的取值:
| 常量 | 值 | 描述 |
|---|---|---|
QSizePolicy::GrowFlag | 1 | 如有必要,控件可以超出其大小提示范围进行扩展。 |
QSizePolicy::ExpandFlag | 2 | 控件应尽可能多地获取空间。 |
QSizePolicy::ShrinkFlag | 4 | 如有必要,控件可以缩小到小于其大小提示。 |
QSizePolicy::IgnoreFlag | 8 | 该控件的大小提示将被忽略。该控件将尽可能多地占用空间。 |
另请参阅 Policy 。
成员函数文档
[constexpr noexcept] QSizePolicy::QSizePolicy()
创建一个 QSizePolicy 对象,其水平和垂直策略分别为Fixed 。
可通过setHorizontalPolicy()和setVerticalPolicy()函数修改这些策略。如果控件的首选高度取决于其宽度(例如,具有行换行功能的QLabel ),请使用setHeightForWidth()函数。
另请参阅 setHorizontalStretch() 和setVerticalStretch()。
[constexpr noexcept] QSizePolicy::QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType)
根据给定的horizontal 和vertical 策略,以及指定的控件type ,构建一个QSizePolicy对象。
如果小部件的首选高度取决于其宽度(例如,具有行换行功能的QLabel ),请使用setHeightForWidth()。
另请参阅 setHorizontalStretch()、setVerticalStretch() 和controlType()。
[noexcept] QSizePolicy::ControlType QSizePolicy::controlType() const
返回与该大小策略所适用的控件相关联的控件类型。
另请参阅 setControlType()。
[constexpr noexcept] Qt::Orientations QSizePolicy::expandingDirections() const
返回该控件是否可以使用比QWidget::sizeHint()函数所指示的更多空间。
若返回值为Qt::Horizontal 或Qt::Vertical ,则表示该控件可在水平或垂直方向上扩展(即水平或垂直方向的策略分别为Expanding 或MinimumExpanding );而若返回值为Qt::Horizontal |Qt::Vertical ,则表示该控件可在两个维度上同时扩展。
另请参阅 horizontalPolicy() 和verticalPolicy()。
[constexpr noexcept] bool QSizePolicy::hasHeightForWidth() const
如果控件的首选高度取决于其宽度,则返回 `true `;否则返回 `false`。
另请参阅 setHeightForWidth()。
[constexpr noexcept] bool QSizePolicy::hasWidthForHeight() const
如果控件的宽度取决于其高度,则返回true ;否则返回false 。
另请参阅 setWidthForHeight()。
[constexpr noexcept] QSizePolicy::Policy QSizePolicy::horizontalPolicy() const
返回尺寸策略的水平分量。
另请参阅 setHorizontalPolicy()、verticalPolicy() 和horizontalStretch()。
[constexpr noexcept] int QSizePolicy::horizontalStretch() const
返回尺寸策略的水平拉伸因子。
另请参阅 setHorizontalStretch()、verticalStretch() 和horizontalPolicy()。
[constexpr noexcept] bool QSizePolicy::retainSizeWhenHidden() const
返回布局在隐藏小部件时是否应保留其大小的标志。默认值为false 。
另请参阅 setRetainSizeWhenHidden()。
[noexcept] void QSizePolicy::setControlType(QSizePolicy::ControlType type)
将此尺寸策略所适用的控件关联的控件类型设置为type 。
控件类型指定了此尺寸策略所适用的控件类型。某些样式(尤其是 QMacStyle)会使用该类型,以便在控件之间插入适当的间距。例如,macOS Aqua 设计规范规定,按压按钮之间的间距应为 12 像素,而垂直堆叠的单选按钮仅需 6 像素。
另请参阅 controlType() 和QStyle::layoutSpacing()。
[constexpr noexcept] void QSizePolicy::setHeightForWidth(bool dependent)
将决定控件的首选高度是否取决于其宽度的标志设置为dependent 。
另请参阅 hasHeightForWidth() 和setWidthForHeight()。
[constexpr noexcept] void QSizePolicy::setHorizontalPolicy(QSizePolicy::Policy policy)
将水平分量设置为给定的policy 。
另请参阅 horizontalPolicy()、setVerticalPolicy() 和setHorizontalStretch()。
[constexpr] void QSizePolicy::setHorizontalStretch(int stretchFactor)
将尺寸策略的水平拉伸因子设置为给定的stretchFactor 。stretchFactor 必须在[0,255]范围内。
当两个小部件在水平布局中相邻时,将左侧小部件的水平拉伸因子设置为 2,将右侧小部件的拉伸因子设置为 1,可确保左侧小部件的大小始终是右侧小部件的两倍。
另请参阅 horizontalStretch()、setVerticalStretch() 和setHorizontalPolicy()。
[constexpr noexcept] void QSizePolicy::setRetainSizeWhenHidden(bool retainSize)
设置布局在隐藏小部件时是否应保留该小部件的大小。如果retainSize 的值为true ,则隐藏小部件不会改变布局。
另请参阅 retainSizeWhenHidden()。
[constexpr noexcept] void QSizePolicy::setVerticalPolicy(QSizePolicy::Policy policy)
将垂直分量设置为给定的policy 。
另请参阅 verticalPolicy()、setHorizontalPolicy() 和setVerticalStretch()。
[constexpr] void QSizePolicy::setVerticalStretch(int stretchFactor)
将尺寸策略的垂直拉伸系数设置为给定的stretchFactor 。stretchFactor 必须在[0,255]范围内。
当两个小部件在垂直布局中相邻时,将顶部小部件的垂直拉伸因子设置为 2,将底部小部件的垂直拉伸因子设置为 1,可确保顶部小部件的大小始终是底部小部件的两倍。
另请参阅 verticalStretch()、setHorizontalStretch() 和setVerticalPolicy()。
[constexpr noexcept] void QSizePolicy::setWidthForHeight(bool dependent)
将决定控件宽度是否取决于其高度的标志设置为dependent 。
此功能仅支持QGraphicsLayout 的子类。布局中无法同时存在“高度决定宽度”和“宽度决定高度”两种约束。
另请参阅 hasWidthForHeight() 和setHeightForWidth()。
[constexpr noexcept] void QSizePolicy::transpose()
交换水平和垂直方向的布局策略,并进行拉伸。
另请参阅 transposed()。
[constexpr noexcept] QSizePolicy QSizePolicy::transposed() const
返回一个尺寸策略对象,其中水平和垂直策略以及拉伸设置已被互换。
另请参阅 transpose()。
[constexpr noexcept] QSizePolicy::Policy QSizePolicy::verticalPolicy() const
返回大小策略的垂直分量。
另请参阅 setVerticalPolicy()、horizontalPolicy() 和verticalStretch()。
[constexpr noexcept] int QSizePolicy::verticalStretch() const
返回尺寸策略的垂直拉伸系数。
另请参阅 setVerticalStretch()、horizontalStretch() 和verticalPolicy()。
QSizePolicy::operator QVariant() const
返回一个QVariant ,其中存储了此QSizePolicy 。
[constexpr noexcept] bool QSizePolicy::operator!=(const QSizePolicy &other) const
如果该策略与other 不同,则返回true ;否则返回false 。
另请参阅 operator==()。
[constexpr noexcept] bool QSizePolicy::operator==(const QSizePolicy &other) const
如果该策略等于other ,则返回true ;否则返回false 。
另请参阅 operator!=()。
相关非成员
[noexcept] size_t qHash(QSizePolicy key, size_t seed = 0)
返回key 的哈希值,并使用seed 作为计算的初始值。
QDataStream &operator<<(QDataStream &stream, const QSizePolicy &policy)
将大小policy 写入数据流stream 。
另请参阅 QDataStream 运算符的格式。
QDataStream &operator>>(QDataStream &stream, QSizePolicy &policy)
从数据流stream 中读取大小policy 。
另请参阅 QDataStream 运算符的格式。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.