QSizePolicy 类

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

头文件 #include <QSizePolicy>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets

公共类型

枚举ControlType { DefaultType, ButtonBox, CheckBox, ComboBox, Frame, …, ToolButton }
标志ControlTypes
枚举Policy { Fixed, Minimum, Maximum, Preferred, Expanding, …, Ignored }
枚举PolicyFlag { GrowFlag, ExpandFlag, ShrinkFlag, IgnoreFlag }

公共函数

QSizePolicy()
QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType)
QSizePolicy::ControlTypecontrolType() const
Qt::OrientationsexpandingDirections() const
布尔值hasHeightForWidth() const
布尔值hasWidthForHeight() const
QSizePolicy::PolicyhorizontalPolicy() const
整数horizontalStretch() const
布尔值retainSizeWhenHidden() const
空函数setControlType(QSizePolicy::ControlType type)
空函数setHeightForWidth(bool dependent)
空函数setHorizontalPolicy(QSizePolicy::Policy policy)
空函数setHorizontalStretch(int stretchFactor)
空函数setRetainSizeWhenHidden(bool retainSize)
空函数setVerticalPolicy(QSizePolicy::Policy policy)
空函数setVerticalStretch(int stretchFactor)
空函数setWidthForHeight(bool dependent)
空函数转置()
QSizePolicytransposed() const
QSizePolicy::PolicyverticalPolicy() const
整数verticalStretch() const
QVariantoperator QVariant() const
布尔值operator!=(const QSizePolicy &other) const
布尔值operator==(const QSizePolicy &other) const
size_tqHash(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() 函数设置拉伸因子。可以使用 setHeightForWidth() 函数设置标志,以指示组件的 sizeHint() 是否依赖于宽度(例如菜单栏或自动换行的标签)。

可以使用 horizontalPolicy(),verticalPolicy(),horizontalStretch() 和 verticalStretch() 函数检索当前的尺寸策略和拉伸因子。或者,使用 transpose() 函数交换水平和垂直策略和拉伸。函数 hasHeightForWidth() 返回当前标志指示的尺寸提示依赖状态。

使用 expandingDirections() 函数确定相关小部件是否可以利用比其 sizeHint() 函数指示的更多空间,以及确定它可以在哪些方向扩展。

最后,QSizePolicy 类提供了比较此大小策略与给定策略的运算符,以及将此 QSizePolicy 存储为一个 QVariant 对象的运算符。

另请参阅 QSizeQWidget::sizeHint(),QWidget::sizePolicy,以及 QLayoutItem::sizeHint

成员类型文档

enum QSizePolicy::ControlType
flags QSizePolicy::ControlTypes

此枚举指定了各种小部件在布局交互方面的不同类型

常量描述
QSizePolicy::DefaultType0x00000001当未指定时为默认类型。
QSizePolicy::ButtonBox0x00000002一个 QDialogButtonBox 实例。
QSizePolicy::CheckBox0x00000004一个 QCheckBox 实例。
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实例。

The ControlTypes type is a typedef for QFlags<ControlType>. It stores an OR combination of ControlType values.

另请参阅 setControlType() 和 controlType

枚举 QSizePolicy::Policy

此枚举描述了在构建QSizePolicy时使用的各种每个维度的尺寸类型。

常量描述
QSizePolicy::Fixed0仅接受QWidget::sizeHint(),因此小部件不能增长或缩小(例如,推按钮的垂直方向)。
QSizePolicy::MinimumGrowFlagsizeHint()是最小的,且足够。可以扩展小部件,但没有使它更大的优势(例如,推按钮的水平方向)。它的尺寸不能小于sizeHint()提供的尺寸。
QSizePolicy::MaximumShrinkFlagsizeHint()是最大的。如果其他小部件需要空间,则小部件可以被缩小任意数量,而不会受到损害(例如,分隔线)。它的尺寸不能大于sizeHint()提供的尺寸。
QSizePolicy::PreferredGrowFlag | ShrinkFlagsizeHint()是最佳的,但即使被缩小,小部件仍然有用。小部件可以扩展,但没有使它比sizeHint()更大的优势(默认QWidget策略)。
QSizePolicy::ExpandingGrowFlag | ShrinkFlag | ExpandFlagsizeHint()是一个合理的尺寸,但即使被缩小,小部件仍然有用。小部件可以适当使用额外的空间,因此应该尽可能多地获取空间(例如,水平滑动条的横向方向)。
QSizePolicy::MinimumExpandingGrowFlag | ExpandFlagsizeHint()是最小的,且足够。小部件可以适当使用额外的空间,因此应该尽可能多地获取空间(例如,水平滑动条的横向方向)。
QSizePolicy::IgnoredShrinkFlag | GrowFlag | IgnoreFlag忽略sizeHint()。小部件将获取尽可能多的空间。

另请参阅 PolicyFlagsetHorizontalPolicy() 和 setVerticalPolicy

枚举 QSizePolicy::PolicyFlag

这些标志可以组合在一起以形成各种Policy

常量描述
QSizePolicy::GrowFlag1如果需要,小部件可以增长超过其尺寸提示。
QSizePolicy::ExpandFlag2应使小部件获取尽可能多的空间。
QSizePolicy::ShrinkFlag4如果需要,小部件可以缩小到其尺寸提示以下。
QSizePolicy::IgnoreFlag8忽略小部件的尺寸提示。小部件将获取尽可能多的空间。

另请参阅 Policy

成员函数文档

[constexpr noexcept] QSizePolicy::QSizePolicy()

使用默认的水平和垂直策略构造 QSizePolicy 对象。

可以使用 setHorizontalPolicy() 和 setVerticalPolicy() 函数更改策略。如果小部件的首选高度取决于其宽度(例如,具有行换行功能的 QLabel),请使用 setHeightForWidth() 函数。

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

[constexpr noexcept] QSizePolicy::QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType)

使用指定的水平策略和垂直策略,以及指定的控制类型构造 QSizePolicy 对象。

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

另请参阅setHorizontalStretch(),setVerticalStretch() 和 controlType

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

返回与应用于此大小策略的小部件相关联的控制类型。

另请参阅setControlType

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

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

Qt::HorizontalQt::Vertical 的值表示小部件可以在水平或垂直方向上生长(即,水平策略或垂直策略是 ExpandingMinimumExpanding),而 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)

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

当两个组件在水平布局中相邻时,将左侧组件的水平拉伸因子设置为 2,右侧组件的因子设置为 1,将确保左侧组件的大小将是右侧组件的两倍。

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

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

设置是否在隐藏布局时保留小部件的大小。如果 retainSizetrue,则隐藏小部件时不会更改布局。

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

使用 seed 对计算进行初始化,返回 key 的哈希值。

QDataStream &operator<<(QDataStream &stream, const QSizePolicy &policy)

将大小策略 policy 写入数据流 stream

另请参阅 QDataStream 操作符的格式

QDataStream &operator>>(QDataStream &stream, QSizePolicy &policy)

从数据流 stream 中读取大小策略 policy

另请参阅 QDataStream 操作符的格式

© 2024 The Qt Company Ltd. 本文档中的贡献属于其各自的版权所有者。本文档是根据自由软件基金会的条件,以 GNU 自由文档许可证版本 1.3 发布的。Qt 和相应的标志是芬兰的 The Qt Company Ltd. 和/或在全世界其他国家的商标。所有其他商标均为其各自所有者的财产。