Класс 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 |
| int | indexOf(QLayoutItem *layoutItem) 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 |
- 31 открытая функция унаследована от QObject
- 17 открытых функций унаследовано от QLayoutItem
Статические открытые члены
| QSize | closestAcceptableSize(const QWidget *widget, const QSize &size) |
| const QMetaObject | staticMetaObject |
- 9 статических открытых членов унаследовано от QObject
Защищённые функции
| void | addChildLayout(QLayout *l) |
| void | addChildWidget(QWidget *w) |
| QRect | alignmentRect(const QRect &r) const |
Переопределённые защищённые функции
| virtual void | childEvent(QChildEvent *e) override |
- 9 защищённых функций унаследовано от 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 и Пример макета Flow.
Документация по типам членов
enum 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 не может быть nullptr.
Макет устанавливается непосредственно как верхнеуровневый макет для parent. Для виджета может быть только один верхнеуровневый макет. Он возвращается функцией 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().
int QLayout::indexOf(QLayoutItem *layoutItem) const
Ищет элемент области размещения layoutItem в этой области размещения (без учёта дочерних областей размещения).
Возвращает индекс layoutItem или -1, если layoutItem не найден.
Данная функция была добавлена в Qt 5.12.
[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)
Устанавливает отступы слева, сверху, справа и снизу для использования вокруг макета.
По умолчанию, 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)
Должно быть реализовано в подклассах для удаления элемента макета по индексу 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/qt-5.12/qlayout.html