Класс QLayout
Класс QLayout — базовый класс менеджеров геометрии. Подробнее...
| Заголовок: | #include <QLayout> |
| qmake: | QT += widgets |
| Наследуется от: | QObject и QLayoutItem |
| Наследует: |
Типы
| Перечисление | SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint } |
Свойства
- sizeConstraint : SizeConstraint
- spacing : int
- 1 свойство унаследовано от QObject
Открытые функции
| QLayout(QWidget *parent) | |
| QLayout() | |
| bool | activate() |
| virtual void | addItem(QLayoutItem *item) = 0 |
| void | addWidget(QWidget *w) |
| QMargins | contentsMargins() const |
| QRect | contentsRect() const |
| virtual int | count() const = 0 |
| void | getContentsMargins(int *left, int *top, int *right, int *bottom) const |
| virtual int | indexOf(QWidget *widget) const |
| bool | isEnabled() const |
| virtual QLayoutItem * | itemAt(int index) const = 0 |
| QWidget * | menuBar() const |
| QWidget * | parentWidget() const |
| void | removeItem(QLayoutItem *item) |
| void | removeWidget(QWidget *widget) |
| QLayoutItem * | replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively) |
| bool | setAlignment(QWidget *w, Qt::Alignment alignment) |
| bool | setAlignment(QLayout *l, Qt::Alignment alignment) |
| void | setContentsMargins(int left, int top, int right, int bottom) |
| void | setContentsMargins(const QMargins &margins) |
| void | setEnabled(bool enable) |
| void | setMenuBar(QWidget *widget) |
| void | setSizeConstraint(QLayout::SizeConstraint) |
| void | setSpacing(int) |
| QLayout::SizeConstraint | sizeConstraint() const |
| int | spacing() const |
| virtual QLayoutItem * | takeAt(int index) = 0 |
| void | update() |
Переопределенные открытые функции
| virtual QSizePolicy::ControlTypes | controlTypes() const override |
| virtual Qt::Orientations | expandingDirections() const override |
| virtual QRect | geometry() const override |
| virtual void | invalidate() override |
| virtual bool | isEmpty() const override |
| virtual QLayout * | layout() override |
| virtual QSize | maximumSize() const override |
| virtual QSize | minimumSize() const override |
| virtual void | setGeometry(const QRect &r) override |
- 34 открытых функции унаследованы от QObject
- 17 открытых функций унаследованы от QLayoutItem
Статические открытые члены
| QSize | closestAcceptableSize(const QWidget *widget, const QSize &size) |
- 10 статических открытых членов унаследованы от QObject
Защищенные функции
| void | addChildLayout(QLayout *l) |
| void | addChildWidget(QWidget *w) |
| QRect | alignmentRect(const QRect &r) const |
Переопределенные защищенные функции
| virtual void | childEvent(QChildEvent *e) override |
- 9 защищенных функций унаследованы от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 2 сигнала унаследованы от QObject
- 1 открытая переменная унаследована от QObject
- 2 защищенных переменных унаследованы от QObject
Подробное описание
Класс QLayout — базовый класс менеджеров геометрии.
Это абстрактный базовый класс, от которого наследуются конкретные классы QBoxLayout, QGridLayout, QFormLayout и QStackedLayout.
Для пользователей подклассов QLayout или QMainWindow вряд ли есть необходимость использовать базовые функции, предоставляемые QLayout, такие как setSizeConstraint() или setMenuBar(). Подробнее см. Управление макетами.
Для создания собственного менеджера макета реализуйте функции addItem(), sizeHint(), setGeometry(), itemAt() и takeAt(). Также следует реализовать minimumSize(), чтобы предотвратить изменение размера макета до нулевого размера при недостатке места. Для поддержки элементов, высота которых зависит от ширины, реализуйте hasHeightForWidth() и heightForWidth(). Подробнее см. примеры Border Layout и Flow Layout.
Управление геометрией прекращается при удалении менеджера макета.
См. также QLayoutItem, Управление макетами, Пример основных макетов, Пример макета Border Layout и Пример макета Flow Layout.
Документация по типам элементов
перечисление QLayout::SizeConstraint
Возможные значения:
| Константа | Значение | Описание |
|---|---|---|
QLayout::SetDefaultConstraint |
0 |
Минимальный размер основного виджета устанавливается в minimumSize(), если у виджета нет минимального размера. |
QLayout::SetFixedSize |
3 |
Размер основного виджета устанавливается в sizeHint(); изменение размера невозможно. |
QLayout::SetMinimumSize |
2 |
Минимальный размер основного виджета устанавливается в minimumSize(); он не может быть меньше. |
QLayout::SetMaximumSize |
4 |
Максимальный размер основного виджета устанавливается в maximumSize(); он не может быть больше. |
QLayout::SetMinAndMaxSize |
5 |
Минимальный размер основного виджета устанавливается в minimumSize(), а максимальный — в maximumSize(). |
QLayout::SetNoConstraint |
1 |
Виджет не ограничен. |
См. также setSizeConstraint().
Документация свойств
sizeConstraint : SizeConstraint
Это свойство определяет режим изменения размера макета.
По умолчанию используется режим SetDefaultConstraint.
Функции доступа:
| QLayout::SizeConstraint | sizeConstraint() const |
| void | setSizeConstraint(QLayout::SizeConstraint) |
spacing : int
Это свойство задаёт интервал между виджетами внутри макета.
Если значение не установлено явно, интервал наследуется от родительского макета или настроек стиля родительского виджета.
Для QGridLayout и QFormLayout можно установить разные горизонтальный и вертикальный интервалы, используя setHorizontalSpacing() и setVerticalSpacing(). В этом случае spacing() возвращает -1.
Функции доступа:
| int | spacing() const |
| void | setSpacing(int) |
См. также contentsRect(), getContentsMargins(), QStyle::layoutSpacing() и QStyle::pixelMetric().
Документация по функциям
QLayout::QLayout(QWidget *parent)
Создаёт новый главный QLayout с родителем parent. parent не может быть 0.
Для виджета может быть только один главный макет. Он возвращается функцией QWidget::layout().
QLayout::QLayout()
Создаёт новый дочерний QLayout.
Этот макет должен быть вставлен в другой макет, прежде чем начнется управление геометрией.
bool QLayout::activate()
Повторно выполняет расчёт макета для parentWidget(), если необходимо.
Обычно вызывать эту функцию не нужно, так как она вызывается автоматически в наиболее подходящее время. Она возвращает true, если макет был пересчитан.
См. также update() и QWidget::updateGeometry().
[protected] void QLayout::addChildLayout(QLayout *l)
Эта функция вызывается из функций addLayout() или insertLayout() в подклассах для добавления макета l как дочернего макета.
Единственный случай, когда вам нужно вызвать её напрямую, — это если вы реализуете пользовательский макет, поддерживающий вложенные макеты.
См. также QBoxLayout::addLayout(), QBoxLayout::insertLayout() и QGridLayout::addLayout().
[protected] void QLayout::addChildWidget(QWidget *w)
Эта функция вызывается из функций addWidget() в подклассах для добавления w как управляемого виджета макета.
Если w уже управляется макетом, эта функция выведет предупреждение и удалит w из этого макета. Поэтому эту функцию нужно вызвать перед добавлением w в структуру данных макета.
[pure virtual] void QLayout::addItem(QLayoutItem *item)
Реализуется в подклассах для добавления item. Способ добавления специфичен для каждого подкласса.
Эта функция обычно не вызывается в коде приложения. Для добавления виджета в макет используйте функцию addWidget(); для добавления дочернего макета используйте функцию addLayout(), предоставляемую соответствующим подклассом QLayout.
Примечание: Владение item передаётся макету, и макет отвечает за его удаление.
См. также addWidget(), QBoxLayout::addLayout() и QGridLayout::addLayout().
void QLayout::addWidget(QWidget *w)
Добавляет виджет w в этот макет способом, специфичным для макета. Эта функция использует addItem().
[protected] QRect QLayout::alignmentRect(const QRect &r) const
Возвращает прямоугольник, который должен быть охвачен, когда геометрия этого макета устанавливается в r, при условии, что этот макет поддерживает setAlignment().
Результат выводится из sizeHint() и expanding(). Он никогда не больше, чем r.
[override virtual protected] void QLayout::childEvent(QChildEvent *e)
Переопределено из QObject::childEvent().
[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)
Возвращает размер, который удовлетворяет всем ограничениям размера для widget, включая heightForWidth(), и который максимально близок к size.
QMargins QLayout::contentsMargins() const
Возвращает отступы, используемые вокруг макета.
По умолчанию QLayout использует значения, предоставленные стилем. На большинстве платформ отступ составляет 11 пикселей по всем направлениям.
Эта функция была добавлена в Qt 4.6.
См. также setContentsMargins().
QRect QLayout::contentsRect() const
Возвращает прямоугольник geometry() макета, но с учётом отступов содержимого.
Эта функция была добавлена в Qt 4.3.
См. также setContentsMargins() и getContentsMargins().
[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const
Переопределено из QLayoutItem::controlTypes().
[pure virtual] int QLayout::count() const
Должно быть реализовано в подклассах для возвращения количества элементов в макете.
См. также itemAt().
[override virtual] Qt::Orientations QLayout::expandingDirections() const
Переопределено из QLayoutItem::expandingDirections().
Возвращает, может ли этот макет использовать больше места, чем sizeHint(). Значение Qt::Vertical или Qt::Horizontal означает, что он хочет расти только в одном измерении, тогда как Qt::Vertical | Qt::Horizontal означает, что он хочет расти в обоих измерениях.
По умолчанию возвращает Qt::Horizontal | Qt::Vertical. Подклассы переопределяют его, чтобы вернуть осмысленное значение на основе политик размера дочерних виджетов политики размера.
См. также sizeHint().
[override virtual] QRect QLayout::geometry() const
Переопределено из QLayoutItem::geometry().
См. также setGeometry().
void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const
Извлекает левые, верхние, правые и нижние отступы, используемые вокруг макета, и присваивает их *left, *top, *right и *bottom (если они не являются указателями null).
По умолчанию QLayout использует значения, предоставляемые стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.
Эта функция была добавлена в Qt 4.3.
См. также setContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin и PM_LayoutBottomMargin.
[virtual] int QLayout::indexOf(QWidget *widget) const
Ищет виджет widget в этом макете (не включая дочерние макеты).
Возвращает индекс widget или -1, если widget не найден.
По умолчанию реализация перебирает все элементы с помощью itemAt()
[override virtual] void QLayout::invalidate()
Переопределено из QLayoutItem::invalidate().
[override virtual] bool QLayout::isEmpty() const
Переопределено из QLayoutItem::isEmpty().
bool QLayout::isEnabled() const
Возвращает true, если макет включён; в противном случае возвращает false.
См. также setEnabled().
[pure virtual] QLayoutItem *QLayout::itemAt(int index) const
Должно быть реализовано в подклассах для возвращения элемента макета по индексу index. Если такого элемента нет, функция должна вернуть 0. Элементы нумеруются последовательно с 0. Если элемент удален, другие элементы будут переиндексированы.
Эта функция может использоваться для перебора макета. Следующий код нарисует прямоугольник для каждого элемента макета в структуре макета виджета.
static void paintLayout(QPainter *painter, QLayoutItem *item)
{
QLayout *layout = item->layout();
if (layout) {
for (int i = 0; i < layout->count(); ++i)
paintLayout(painter, layout->itemAt(i));
}
painter->drawRect(item->geometry());
}
void MyWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
if (layout())
paintLayout(&painter, layout());
}
[override virtual] QLayout *QLayout::layout()
Переопределено из QLayoutItem::layout().
[override virtual] QSize QLayout::maximumSize() const
Переопределено из QLayoutItem::maximumSize().
Возвращает максимальный размер этого макета. Это наибольший размер, который макет может иметь, при этом соблюдая все спецификации.
Возвращаемое значение не включает пространство, необходимое QWidget::setContentsMargins() или menuBar().
Реализация по умолчанию позволяет неограниченное изменение размера.
QWidget *QLayout::menuBar() const
Возвращает установленную для этого макета строку меню или 0, если строка меню не установлена.
См. также setMenuBar().
[override virtual] QSize QLayout::minimumSize() const
Переопределено из QLayoutItem::minimumSize().
Возвращает минимальный размер этого макета. Это наименьший размер, который макет может иметь, при этом соблюдая все спецификации.
Возвращаемое значение не включает пространство, необходимое QWidget::setContentsMargins() или menuBar().
Реализация по умолчанию позволяет неограниченное изменение размера.
QWidget *QLayout::parentWidget() const
Возвращает родительский виджет этого макета или 0, если этот макет не установлен ни на какой виджет.
Если макет является подмакетом, эта функция возвращает родительский виджет родительского макета.
См. также parent().
void QLayout::removeItem(QLayoutItem *item)
Удаляет элемент макета item из макета. Ответственность за удаление элемента лежит на вызывающей стороне.
Обратите внимание, что item может быть макетом (поскольку QLayout наследуется от QLayoutItem).
См. также removeWidget() и addItem().
void QLayout::removeWidget(QWidget *widget)
Удаляет виджет widget из макета. После этого вызова ответственность за предоставление виджету разумной геометрии или размещение виджета обратно в макет или явное скрытие, если необходимо, лежит на вызывающей стороне.
Примечание: Владение widget остаётся таким же, как при добавлении.
См. также removeItem(), QWidget::setGeometry() и addWidget().
QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)
Ищет виджет from и заменяет его виджетом to, если он найден. Возвращает элемент макета, содержащий виджет from при успехе. В противном случае возвращается 0. Если options содержит Qt::FindChildrenRecursively (по умолчанию), ищутся подмакеты для замены. Любой другой флаг в options игнорируется.
Обратите внимание, что возвращаемый элемент, следовательно, может не принадлежать этому макету, а подмакету.
Возвращаемый элемент макета больше не принадлежит макету и должен быть либо удалён, либо вставлен в другой макет. Виджет from больше не управляется макетом и, возможно, должен быть удалён или скрыт. Родитель виджета from остаётся неизменным.
Эта функция работает для встроенных макетов Qt, но может не работать для пользовательских макетов.
Эта функция была добавлена в Qt 5.2.
См. также indexOf().
bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)
Устанавливает выравнивание для виджета w на alignment и возвращает true, если w найден в этом макете (не включая дочерние макеты); в противном случае возвращает false.
bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)
Это перегруженная функция.
Устанавливает выравнивание для макета l на alignment и возвращает true если l найден в этом макете (не включая дочерние макеты); в противном случае возвращает false.
void QLayout::setContentsMargins(int left, int top, int right, int bottom)
Устанавливает отступы left, top, right и bottom для использования вокруг макета.
По умолчанию QLayout использует значения, предоставляемые стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.
Эта функция была добавлена в Qt 4.3.
См. также contentsMargins(), getContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin и PM_LayoutBottomMargin.
void QLayout::setContentsMargins(const QMargins &margins)
Устанавливает отступы вокруг макета.
По умолчанию, QLayout использует значения, заданные стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.
Данная функция была введена в Qt 4.6.
См. также contentsMargins().
void QLayout::setEnabled(bool enable)
Включает данный макет, если enable равно true, иначе отключает.
Включенный макет динамически реагирует на изменения; отключенный макет ведет себя как несуществующий.
По умолчанию все макеты включены.
См. также isEnabled().
[override virtual] void QLayout::setGeometry(const QRect &r)
Переопределено из QLayoutItem::setGeometry().
См. также geometry().
void QLayout::setMenuBar(QWidget *widget)
Указывает менеджеру геометрии расположить widget с меню в верхней части parentWidget(), вне QWidget::contentsMargins(). Все дочерние виджеты размещаются ниже нижнего края панели меню.
См. также menuBar().
[pure virtual] QLayoutItem *QLayout::takeAt(int index)
Должно быть реализовано в подклассах для удаления элемента макета по индексу из макета и возвращения элемента. Если такого элемента нет, функция ничего не должна делать и вернуть 0. Элементы нумеруются последовательно, начиная с 0. Если элемент удален, другие элементы будут переиндексированы.
Следующий фрагмент кода демонстрирует безопасный способ удаления всех элементов из макета:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child;
} void QLayout::update()
Обновляет макет для parentWidget().
Обычно вызывать это не нужно, так как оно автоматически вызывается в наиболее подходящее время.
См. также activate() и invalidate().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qlayout.html