QSizePolicy Class

QSizePolicy 类是描述水平和垂直大小调整策略的布局属性。更多

Header: #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
QVariant 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 属性来改变特定 widget 的这一策略。

QSizePolicy 包含两个独立的QSizePolicy::Policy 值和两个拉伸因子;一个描述了部件的水平尺寸策略,另一个描述了其垂直尺寸策略。它还包含一个标志,用于指示首选尺寸的高度和宽度是否相关。

水平和垂直策略可以在构造函数中设置,也可以使用setHorizontalPolicy() 和setVerticalPolicy() 函数更改。拉伸系数可使用setHorizontalStretch() 和setVerticalStretch() 函数设置。可以使用setHeightForWidth() 函数设置表示窗口小部件sizeHint() 是否与宽度相关的标志(如菜单栏或单词包装标签)。

可以使用horizontalPolicy(),verticalPolicy(),horizontalStretch() 和verticalStretch() 函数获取当前的尺寸策略和拉伸因子。此外,还可以使用transpose() 函数交换水平和垂直策略和拉伸因子。hasHeightForWidth() 函数返回表示大小提示依赖关系的标志的当前状态。

使用expandingDirections() 函数可确定相关 widget 可使用的空间是否大于其sizeHint() 函数所指示的空间,并找出它可以向哪个方向扩展。

最后,QSizePolicy 类提供了将此大小策略与给定策略进行比较的操作符,以及将此 QSizePolicy 存储为QVariant 对象的QVariant 操作符。

另请参阅 QSize,QWidget::sizeHint(),QWidget::sizePolicy, 和QLayoutItem::sizeHint() 。

成员类型文档

枚举 QSizePolicy::ControlType
flags QSizePolicy::ControlTypes

该枚举指定了布局交互方面的不同部件类型:

常量说明
QSizePolicy::DefaultType0x00000001默认类型(未指定时)。
QSizePolicy::ButtonBox0x00000002QDialogButtonBox 实例。
QSizePolicy::CheckBox0x00000004QCheckBox 实例。
QSizePolicy::ComboBox0x00000008一个QComboBox 实例。
QSizePolicy::Frame0x00000010一个QFrame 实例。
QSizePolicy::GroupBox0x00000020一个QGroupBox 实例。
QSizePolicy::Label0x00000040一个QLabel 实例。
QSizePolicy::Line0x00000080带有QFrame::HLineQFrame::VLineQFrame 实例。
QSizePolicy::LineEdit0x00000100一个QLineEdit 实例。
QSizePolicy::PushButton0x00000200一个QPushButton 实例。
QSizePolicy::RadioButton0x00000400一个QRadioButton 实例。
QSizePolicy::Slider0x00000800一个QAbstractSlider 实例。
QSizePolicy::SpinBox0x00001000一个QAbstractSpinBox 实例。
QSizePolicy::TabWidget0x00002000一个QTabWidget 实例。
QSizePolicy::ToolButton0x00004000一个QToolButton 实例。

ControlTypes 类型是QFlags<ControlType> 的类型定义。它存储 ControlType 值的 OR 组合。

另请参阅 setControlType() 和controlType()。

enum QSizePolicy::Policy

该枚举描述了在构建QSizePolicy 时使用的各种按维度划分的尺寸类型。

常量说明
QSizePolicy::Fixed0QWidget::sizeHint() 是唯一可接受的选择,因此窗口小部件永远不会增长或缩小(例如按钮的垂直方向)。
QSizePolicy::MinimumGrowFlagsizeHint()是最小的,也是足够的。widget 可以扩大,但扩大也没有好处(例如按键的水平方向)。它不能小于 sizeHint() 提供的大小。
QSizePolicy::MaximumShrinkFlagsizeHint() 是一个最大值。如果其他窗口小部件需要空间(如分隔线),窗口小部件可以任意缩小,而不会受到影响。但不能大于 sizeHint() 提供的大小。
QSizePolicy::PreferredGrowFlag | ShrinkFlag最好使用 sizeHint(),但窗口部件可以缩小,而且仍然有用。widget 可以展开,但大于 sizeHint()(默认QWidget 策略)也没有好处。
QSizePolicy::ExpandingGrowFlag | ShrinkFlag | ExpandFlagsizeHint() 是一个合理的尺寸,但窗口小部件可以缩小,而且仍然有用。窗口小部件可以利用额外的空间,因此应获得尽可能多的空间(例如水平滑块的水平方向)。
QSizePolicy::MinimumExpandingGrowFlag | ExpandFlagsizeHint()是最小的,也是足够的。窗口小部件可以利用额外空间,因此应获得尽可能多的空间(例如水平滑块的水平方向)。
QSizePolicy::IgnoredShrinkFlag | GrowFlag | IgnoreFlagsizeHint()会被忽略。窗口小部件将获得尽可能多的空间。

另请参见 PolicyFlag,setHorizontalPolicy() 和setVerticalPolicy()。

enum QSizePolicy::PolicyFlag

这些标志组合在一起,形成各种Policy 值:

常量说明
QSizePolicy::GrowFlag1必要时,窗口小部件可以超出其大小提示。
QSizePolicy::ExpandFlag2部件应获得尽可能多的空间。
QSizePolicy::ShrinkFlag4如有必要,窗口小部件可以缩小到其尺寸提示以下。
QSizePolicy::IgnoreFlag8忽略 widget 的尺寸提示。widget 将获得尽可能多的空间。

另请参阅 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)

使用给定的horizontalvertical 策略以及指定的控件type 构建一个 QSizePolicy 对象。

如果控件的首选高度取决于控件的宽度(例如,具有换行功能的QLabel ),请使用setHeightForWidth() 。

另请参阅 setHorizontalStretch()、setVerticalStretch() 和controlType()。

[noexcept] QSizePolicy::ControlType QSizePolicy::controlType() const

返回与适用此尺寸策略的 widget 相关联的控件类型。

另请参阅 setControlType()。

[constexpr noexcept] Qt::Orientations QSizePolicy::expandingDirections() const

返回部件是否可以使用比QWidget::sizeHint() 函数所指示的更多空间。

Qt::HorizontalQt::Vertical 的值表示 widget 可以水平或垂直增长(即水平或垂直策略为ExpandingMinimumExpanding ),而Qt::Horizontal |Qt::Vertical 表示它可以在两个维度上增长。

另请参阅 horizontalPolicy() 和verticalPolicy()。

[constexpr noexcept] bool QSizePolicy::hasHeightForWidth() const

如果 widget 的首选高度取决于其宽度,则返回true ;否则返回false

另请参见 setHeightForWidth()。

[constexpr noexcept] bool QSizePolicy::hasWidthForHeight() const

如果 Widget 的宽度取决于高度,则返回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

返回隐藏 widget 时布局是否应保留其大小。默认为false

另请参阅 setRetainSizeWhenHidden().

[noexcept] void QSizePolicy::setControlType(QSizePolicy::ControlType type)

将与适用此尺寸策略的 widget 相关联的控制类型设置为type

控件类型指定了此尺寸策略适用的部件的类型。某些样式(尤其是 QMacStyle)会使用它在 widget 之间插入适当的间距。例如,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)

将大小策略的水平拉伸因子设置为给定的stretchFactorstretchFactor 的范围必须是 [0,255]。

当两个窗口小部件在水平布局中相邻时,将左边窗口小部件的水平拉伸因子设置为 2,右边窗口小部件的因子设置为 1,可确保左边窗口小部件的大小始终是右边窗口小部件的两倍。

另请参阅 horizontalStretch()、setVerticalStretch() 和setHorizontalPolicy()。

[constexpr noexcept] void QSizePolicy::setRetainSizeWhenHidden(bool retainSize)

设置隐藏 widget 时,布局是否应保留 widget 的大小。如果retainSizetrue ,则布局不会因隐藏 widget 而改变。

另请参阅 retainSizeWhenHidden().

[constexpr noexcept] void QSizePolicy::setVerticalPolicy(QSizePolicy::Policy policy)

将垂直分量设置为给定的policy

另请参见 verticalPolicy()、setHorizontalPolicy() 和setVerticalStretch()。

[constexpr] void QSizePolicy::setVerticalStretch(int stretchFactor)

将尺寸策略的垂直拉伸因子设置为给定的stretchFactorstretchFactor 的范围必须是 [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()。

QVariant QSizePolicy::operator QVariant() const

返回存储此QSizePolicyQVariant

[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 操作符的格式

© 2025 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.