Spec-Zone.ru › Qt 5.14

Класс QLayout

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

Заголовок: #include <QLayout>
qmake: QT += widgets
Наследуется от: QObject и QLayoutItem
Наследует:

QBoxLayout, QFormLayout, QGridLayout и QStackedLayout

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

Открытые типы

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

Свойства

  • sizeConstraint : SizeConstraint
  • spacing : int

Открытые функции

QLayout()
QLayout(QWidget *parent)
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 направленияРасширения() 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.

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

int spacing() const
void setSpacing(int)

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

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

QLayout::QLayout()

Создаёт новый дочерний QLayout.

Этот макет должен быть вставлен в другой макет, прежде чем будет работать управление геометрией.

QLayout::QLayout(QWidget *parent)

Создаёт новый QLayout верхнего уровня с родителем parent. parent не может быть nullptr.

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

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 пикселей во всех направлениях.

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

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

QRect QLayout::contentsRect() const

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

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

См. также 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. Подклассы переопределяют его, чтобы возвращать осмысленное значение на основе политик размера дочерних виджетов.

См. также 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 пикселей во всех направлениях.

Эта функция была добавлена в 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() const.

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());
}

См. также 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().

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 пикселей во всех направлениях.

Эта функция была добавлена в 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(const QRect &r).

См. также 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;
}

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

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

Spec-Zone.ru

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