Класс 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(SizeConstraint) |
| void | setSpacing(int) |
| SizeConstraint | sizeConstraint() const |
| int | spacing() const |
| virtual QLayoutItem * | takeAt(int index) = 0 |
| void | update() |
Переопределённые открытые функции
| virtual QSizePolicy::ControlTypes | controlTypes() const |
| virtual Qt::Orientations | expandingDirections() const |
| virtual QRect | geometry() const |
| virtual void | invalidate() |
| virtual bool | isEmpty() const |
| virtual QLayout * | layout() |
| virtual QSize | maximumSize() const |
| virtual QSize | minimumSize() const |
| virtual void | setGeometry(const QRect &r) |
- 31 открытая функция унаследована от QObject
- 17 открытых функций унаследовано от QLayoutItem
Статические открытые члены
| QSize | closestAcceptableSize(const QWidget *widget, const QSize &size) |
- 11 статических открытых членов унаследовано от QObject
Защищённые функции
| void | addChildLayout(QLayout *l) |
| void | addChildWidget(QWidget *w) |
| QRect | alignmentRect(const QRect &r) const |
Переопределённые защищённые функции
| virtual void | childEvent(QChildEvent *e) |
- 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 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.
Функции доступа:
| SizeConstraint | sizeConstraint() const |
| void | setSizeConstraint(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.
[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().
[virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const
Реализовано по-ново из QLayoutItem::controlTypes().
[pure virtual] int QLayout::count() const
Должно быть реализовано в подклассах для возвращения количества элементов в макете.
См. также itemAt().
[virtual] Qt::Orientations QLayout::expandingDirections() const
Реализовано по-ново из QLayoutItem::expandingDirections().
Возвращает, может ли этот макет использовать больше места, чем sizeHint(). Значение Qt::Vertical или Qt::Horizontal означает, что он хочет расти только в одном измерении, тогда как Qt::Vertical | Qt::Horizontal означает, что он хочет расти в обоих измерениях.
Значение по умолчанию — Qt::Horizontal | Qt::Vertical. Подклассы переопределяют его, чтобы вернуть осмысленное значение на основе политик размера дочерних виджетов.
См. также sizeHint().
[virtual] QRect QLayout::geometry() const
Реализовано по-ново из QLayoutItem::geometry().
См. также setGeometry().
void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const
Извлекает левые, верхние, правые и нижние отступы, используемые вокруг макета, и присваивает их *left, *top, *right и *bottom (если они не нулевые указатели).
По умолчанию 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()
[virtual] void QLayout::invalidate()
Реализовано по-ново из QLayoutItem::invalidate().
[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());
}
[virtual] QLayout *QLayout::layout()
Реализовано по-ново из QLayoutItem::layout().
[virtual] QSize QLayout::maximumSize() const
Реализовано по-ново из QLayoutItem::maximumSize().
Возвращает максимальный размер этого макета. Это наибольший размер, который макет может иметь, сохраняя при этом указанные параметры.
Возвращаемое значение не включает пространство, необходимое для QWidget::setContentsMargins() или menuBar().
Значение по умолчанию — неограниченное изменение размера.
QWidget *QLayout::menuBar() const
Возвращает установленную для этого макета строку меню или 0, если строка меню не установлена.
См. также setMenuBar().
[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 истинно, иначе отключает его.
Включенный макет динамически реагирует на изменения; отключенный макет ведет себя так, как будто его не существует.
По умолчанию все макеты включены.
См. также isEnabled().
[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/archives/qt-5.6/qlayout.html