Spec-Zone.ru › Qt 5.12

Класс QLayout

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

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

QBoxLayout, QFormLayout, QGridLayout и QStackedLayout

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

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

Перечисление 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

Дополнительные унаследованные члены

  • 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 и Пример макета 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());
}

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

[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;
}

См. также 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.12/qlayout.html

Spec-Zone.ru

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