Spec-Zone.ru › Qt 6.1

Класс QLayout

Класс QLayout является базовым классом менеджеров геометрии. Подробнее...

Заголовок: #include <QLayout>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследует: QObject и QLayoutItem
Наследуется от:

QBoxLayout, QFormLayout, QGridLayout и QStackedLayout

  • Список всех членов, включая унаследованные

Общедоступные типы

Перечисление SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

Свойства

  • sizeConstraint : SizeConstraint
  • spacing : int

Общедоступные функции

QLayout(QWidget *parent = nullptr)
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(const QWidget *widget) const
virtual int indexOf(const 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)
virtual 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)
virtual void setSpacing(int)
QLayout::SizeConstraint sizeConstraint() const
virtual int spacing() const
virtual QLayoutItem * takeAt(int index) = 0
void unsetContentsMargins()
void update()

Переопределённые общедоступные функции

virtual QSizePolicy::ControlTypes controlTypes() const override
virtual Qt::Orientations направленияРасширения() const override
virtual QRect геометрия() const override
virtual void пересчитать() override
virtual bool пусто() const override
virtual QLayout * макет() override
virtual QSize максимальныйРазмер() const override
virtual QSize минимальныйРазмер() const override
virtual void установитьГеометрию(const QRect &r) override

Статические публичные члены

QSize наиболееПриемлемыйРазмер(const QWidget *widget, const QSize &size)

Защищенные функции

void добавитьМакет(QLayout *l)
void добавитьВиджет(QWidget *w)
QRect прямоугольникВыравнивания(const QRect &r) const

Переопределённые защищённые функции

virtual void событиеПоля(QChildEvent *e) override

Подробное описание

Это абстрактный базовый класс, унаследованный конкретными классами 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.

Документация типов элементов

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.

Функции доступа:

virtual int spacing() const
virtual void setSpacing(int)

См. также contentsRect(), getContentsMargins(), QStyle::layoutSpacing() и QStyle::pixelMetric().

Документация элементов функций

QLayout::QLayout(QWidget *parent = nullptr)

Создает новый главный QLayout с родителем parent.

Компоновка устанавливается непосредственно как главная для parent. Для виджета может быть только одна главная компоновка. Она возвращается функцией QWidget::layout().

Если parent nullptr, то вы должны вставить эту компоновку в другую компоновку или установить её как компоновку виджета, используя QWidget::setLayout().

См. также QWidget::setLayout().

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(QChildEvent *event).

[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)

Возвращает размер, который удовлетворяет всем ограничениям размера для widget, включая heightForWidth(), и который максимально близок к size.

QMargins QLayout::contentsMargins() const

Возвращает отступы, используемые вокруг компоновки.

По умолчанию QLayout использует значения, предоставленные стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.

Примечание: Функция-получатель свойства contentsMargins.

См. также setContentsMargins().

QRect QLayout::contentsRect() const

Возвращает прямоугольник geometry() компоновки, но с учётом отступов содержимого.

См. также setContentsMargins() и getContentsMargins().

[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const

Переопределяет: QLayoutItem::controlTypes() const.

[pure virtual] int QLayout::count() const

Должно быть реализовано в подклассах для возврата количества элементов в макете.

См. также itemAt().

[override virtual] Qt::Orientations QLayout::expandingDirections() const

Переопределяет: QLayoutItem::expandingDirections() const.

Возвращает, может ли этот макет использовать больше места, чем sizeHint(). Значение Qt::Vertical или Qt::Horizontal означает, что он хочет расти только в одном измерении, а Qt::Vertical | Qt::Horizontal означает, что он хочет расти в обоих измерениях.

По умолчанию реализация возвращает Qt::Horizontal | Qt::Vertical. Подклассы переопределяют её, чтобы возвращать осмысленное значение, основанное на политиках размера дочерних виджетов size policies.

См. также sizeHint().

[override virtual] QRect QLayout::geometry() const

Переопределяет: QLayoutItem::geometry() const.

См. также setGeometry().

void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const

Для каждого из left, top, right и bottom, который не nullptr, сохраняет размер отступа, указанного в месте, к которому ссылается указатель.

По умолчанию QLayout использует значения, заданные стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.

См. также setContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin и PM_LayoutBottomMargin.

[virtual] int QLayout::indexOf(const QWidget *widget) const

Ищет виджет widget в этом макете (без учета дочерних макетов).

Возвращает индекс widget или -1, если widget не найден.

По умолчанию реализация итерируется по всем элементам с помощью itemAt().

[virtual, since 5.12] int QLayout::indexOf(const 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() const.

bool QLayout::isEnabled() const

Возвращает true если макет включен; в противном случае возвращает false.

См. также setEnabled().

[pure virtual] QLayoutItem *QLayout::itemAt(int index) const

Должно быть реализовано в подклассах для возврата элемента макета по индексу index. Если такого элемента нет, функция должна возвратить nullptr. Элементы нумеруются последовательно от 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());
}

См. также count() и takeAt().

[override virtual] QLayout *QLayout::layout()

Переопределяет: QLayoutItem::layout().

[override virtual] QSize QLayout::maximumSize() const

Переопределяет: QLayoutItem::maximumSize() const.

Возвращает максимальный размер этого макета. Это наибольший размер, который может иметь макет, соблюдая все спецификации.

Возвращаемое значение не включает пространство, необходимое для QWidget::setContentsMargins() или menuBar().

По умолчанию реализация допускает неограниченное изменение размера.

QWidget *QLayout::menuBar() const

Возвращает панель меню, установленную для этого макета, или nullptr если панель меню не установлена.

См. также setMenuBar().

[override virtual] QSize QLayout::minimumSize() const

Переопределяет: QLayoutItem::minimumSize() const.

Возвращает минимальный размер этого макета. Это наименьший размер, который может иметь макет, соблюдая все спецификации.

Возвращаемое значение не включает пространство, необходимое для QWidget::setContentsMargins() или menuBar().

По умолчанию реализация допускает неограниченное изменение размера.

QWidget *QLayout::parentWidget() const

Возвращает родительский виджет этого макета или nullptr если этот макет не установлен на каком-либо виджете.

Если макет является дочерним макетом, эта функция возвращает родительский виджет родительского макета.

См. также parent().

void QLayout::removeItem(QLayoutItem *item)

Удаляет элемент макета item из макета. Ответственность за удаление элемента лежит на вызывающей стороне.

Обратите внимание, что item может быть макетом (так как QLayout наследует от QLayoutItem).

См. также removeWidget() и addItem().

void QLayout::removeWidget(QWidget *widget)

Удаляет виджет widget из макета. После этого вызова ответственность за придание виджету разумной геометрии или размещение виджета обратно в макет или явное скрытие его при необходимости лежит на вызывающей стороне.

Примечание: Владение widget остаётся таким же, как и при добавлении.

См. также removeItem(), QWidget::setGeometry() и addWidget().

[virtual, since 5.2] QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

Ищет виджет from и заменяет его на виджет to, если найден. Возвращает элемент макета, содержащий виджет from при успехе. В противном случае возвращается nullptr. Если 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 пикселей во всех направлениях.

Примечание: Функция-сеттер для свойства contentsMargins.

См. также contentsMargins(), getContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin и PM_LayoutBottomMargin.

void QLayout::setContentsMargins(const QMargins &margins)

Устанавливает margins для использования вокруг макета.

По умолчанию QLayout использует значения, предоставленные стилем. На большинстве платформ отступ составляет 11 пикселей во всех направлениях.

Примечание: Функция-сеттер для свойства contentsMargins.

См. также contentsMargins().

void QLayout::setEnabled(bool enable)

Включает этот макет, если enable равно true, в противном случае отключает его.

Включенный макет динамически изменяется в соответствии с изменениями; отключенный макет ведет себя так, как будто его не существует.

По умолчанию все макеты включены.

См. также isEnabled().

[override virtual] void QLayout::setGeometry(const QRect &r)

Переопределяет: QLayoutItem::setGeometry(const QRect &r).

См. также 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)) != nullptr) {
    ...
    delete child->widget(); // delete the widget
    delete child;   // delete the layout item
}

См. также itemAt() и count().

[since 6.1] void QLayout::unsetContentsMargins()

Снимает любые заданные пользователем отступы вокруг макета. Макет будет использовать значения по умолчанию, предоставленные стилем.

Эта функция была добавлена в Qt 6.1.

См. также setContentsMargins().

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-6.1/qlayout.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API