Класс QSizePolicy
Класс QSizePolicy — это атрибут макета, описывающий политику изменения размера по горизонтали и вертикали. Подробнее...
| Заголовок: | #include <QSizePolicy> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
Публичные типы
| Перечисление | ControlType { DefaultType, ButtonBox, CheckBox, ComboBox, Frame, …, ToolButton } |
| Флаги | ControlTypes |
| Перечисление | Policy { Fixed, Minimum, Maximum, Preferred, Expanding, …, Ignored } |
| Перечисление | PolicyFlag { GrowFlag, ExpandFlag, ShrinkFlag, IgnoreFlag } |
Публичные функции
| QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType) | |
| QSizePolicy() | |
| 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.
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().
Документация по типам членов
Перечисление QSizePolicy::ControlTypeфлаги 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>. Он хранит результат побитового ИЛИ для значений 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(), но виджет может быть уменьшен и остаться полезным. Виджет может использовать дополнительное пространство, поэтому он должен получить как можно больше места (политика по умолчанию для 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 |
Виджет может увеличиваться за пределы своего размера sizeHint(), если это необходимо. |
QSizePolicy::ExpandFlag |
2 |
Виджет должен получить как можно больше места. |
QSizePolicy::ShrinkFlag |
4 |
Виджет может уменьшаться ниже своего размера sizeHint(), если это необходимо. |
QSizePolicy::IgnoreFlag |
8 |
Размер sizeHint() виджета игнорируется. Виджет получит как можно больше места. |
См. также Policy.
Документация по членам-функциям
QSizePolicy::QSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical, QSizePolicy::ControlType type = DefaultType)
Создаёт объект QSizePolicy с заданными горизонтальными и вертикальными политиками и указанным типом управления.
Используйте setHeightForWidth(), если предпочтительная высота виджета зависит от его ширины (например, QLabel с переносными строками).
См. также setHorizontalStretch(), setVerticalStretch() и controlType().
QSizePolicy::QSizePolicy()
Создаёт объект QSizePolicy с политиками Fixed по горизонтали и вертикали.
Политики можно изменить с помощью функций setHorizontalPolicy() и setVerticalPolicy(). Используйте функцию setHeightForWidth(), если предпочтительная высота виджета зависит от его ширины (например, QLabel с переносными строками).
См. также setHorizontalStretch() и setVerticalStretch().
QSizePolicy::ControlType QSizePolicy::controlType() const
Возвращает тип управления, связанный с виджетом, к которому применяется эта политика размеров.
См. также setControlType().
Qt::Orientations QSizePolicy::expandingDirections() const
Возвращает значение, указывающее, может ли виджет использовать больше места, чем указано в функции QWidget::sizeHint().
Значение Qt::Horizontal или Qt::Vertical означает, что виджет может расти по горизонтали или вертикали (т.е. горизонтальная или вертикальная политика — Expanding или MinimumExpanding), а Qt::Horizontal | Qt::Vertical означает, что он может расти по обеим осям.
См. также horizontalPolicy() и verticalPolicy().
bool QSizePolicy::hasHeightForWidth() const
Возвращает true если предпочтительная высота виджета зависит от его ширины; в противном случае возвращает false.
См. также setHeightForWidth().
bool QSizePolicy::hasWidthForHeight() const
Возвращает true если ширина виджета зависит от его высоты; в противном случае возвращает false.
См. также setWidthForHeight().
QSizePolicy::Policy QSizePolicy::horizontalPolicy() const
Возвращает горизонтальную составляющую политики размера.
См. также setHorizontalPolicy(), verticalPolicy() и horizontalStretch().
int QSizePolicy::horizontalStretch() const
Возвращает коэффициент растяжения по горизонтали для политики размера.
См. также setHorizontalStretch(), verticalStretch() и horizontalPolicy().
[since 5.2] bool QSizePolicy::retainSizeWhenHidden() const
Возвращает значение, указывающее, нужно ли сохранять размер виджета при его скрытии. По умолчанию это false.
Эта функция была введена в Qt 5.2.
См. также setRetainSizeWhenHidden().
void QSizePolicy::setControlType(QSizePolicy::ControlType type)
Устанавливает тип управления, связанный с виджетом, для которого применяется эта политика размера, на type.
Тип управления определяет тип виджета, для которого применяется эта политика размера. Он используется некоторыми стилями, в частности QMacStyle, для вставки правильных отступов между виджетами. Например, в руководствах macOS Aqua указано, что кнопки должны быть разделены 12 пикселями, в то время как вертикально расположенные радиокнопки требуют только 6 пикселей.
См. также controlType() и QStyle::layoutSpacing().
void QSizePolicy::setHeightForWidth(bool dependent)
Устанавливает флаг, определяющий, зависит ли предпочтительная высота виджета от его ширины, на dependent.
См. также hasHeightForWidth() и setWidthForHeight().
void QSizePolicy::setHorizontalPolicy(QSizePolicy::Policy policy)
Устанавливает горизонтальную компоненту на заданную policy.
См. также horizontalPolicy(), setVerticalPolicy() и setHorizontalStretch().
void QSizePolicy::setHorizontalStretch(int stretchFactor)
Устанавливает коэффициент растяжения по горизонтали для политики размера на заданное значение stretchFactor. stretchFactor должен быть в диапазоне [0,255].
При расположении двух виджетов рядом в горизонтальном макете, установка коэффициента растяжения по горизонтали для левого виджета в 2, а для правого в 1 гарантирует, что левый виджет всегда будет в два раза больше правого.
См. также horizontalStretch(), setVerticalStretch() и setHorizontalPolicy().
[since 5.2] void QSizePolicy::setRetainSizeWhenHidden(bool retainSize)
Устанавливает, нужно ли сохранять размер виджета при его скрытии. Если retainSize true, макет не будет изменен при скрытии виджета.
Эта функция была введена в Qt 5.2.
См. также retainSizeWhenHidden().
void QSizePolicy::setVerticalPolicy(QSizePolicy::Policy policy)
Устанавливает вертикальную компоненту на заданную policy.
См. также verticalPolicy(), setHorizontalPolicy() и setVerticalStretch().
void QSizePolicy::setVerticalStretch(int stretchFactor)
Устанавливает коэффициент растяжения по вертикали для политики размера на заданное значение stretchFactor. stretchFactor должен быть в диапазоне [0,255].
При расположении двух виджетов рядом в вертикальном макете, установка коэффициента растяжения по вертикали для верхнего виджета в 2, а для нижнего в 1 гарантирует, что верхний виджет всегда будет в два раза больше нижнего.
См. также verticalStretch(), setHorizontalStretch() и setVerticalPolicy().
void QSizePolicy::setWidthForHeight(bool dependent)
Устанавливает флаг, определяющий, зависит ли ширина виджета от его высоты, на dependent.
Поддерживается только для подклассов QGraphicsLayout. Одновременное использование ограничений «высота по ширине» и «ширина по высоте» в одном макете невозможно.
См. также hasWidthForHeight() и setHeightForWidth().
void QSizePolicy::transpose()
Меняет местами горизонтальную и вертикальную политики и коэффициенты растяжения.
См. также transposed().
[since 5.9] QSizePolicy QSizePolicy::transposed() const
Возвращает объект политики размера с поменянными местами горизонтальной и вертикальной политиками и коэффициентами растяжения.
Эта функция была введена в Qt 5.9.
См. также transpose().
QSizePolicy::Policy QSizePolicy::verticalPolicy() const
Возвращает вертикальную компоненту политики размера.
См. также setVerticalPolicy(), horizontalPolicy() и verticalStretch().
int QSizePolicy::verticalStretch() const
Возвращает коэффициент растяжения по вертикали для политики размера.
См. также setVerticalStretch(), horizontalStretch() и verticalPolicy().
QVariant QSizePolicy::operator QVariant() const
Возвращает QVariant, хранящий эту QSizePolicy.
bool QSizePolicy::operator!=(const QSizePolicy &other) const
Возвращает true , если эта политика отличается от other; в противном случае возвращает false.
См. также operator==().
bool QSizePolicy::operator==(const QSizePolicy &other) const
Возвращает true , если эта политика равна other; в противном случае возвращает false.
См. также operator!=().
Связанные внешние члены
[since 5.6] size_t qHash(QSizePolicy key, size_t seed = 0)
Возвращает значение хэш-функции для key, используя seed для инициализации вычисления.
Эта функция была введена в Qt 5.6.
QDataStream &operator<<(QDataStream &stream, const QSizePolicy &policy)
Записывает размер policy в поток данных stream.
См. также Формат операторов QDataStream.
QDataStream &operator>>(QDataStream &stream, QSizePolicy &policy)
Считывает размер policy из потока данных stream.
См. также Формат операторов QDataStream.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qsizepolicy.html