Класс 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) |
- 32 открытых функции унаследованы от 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.
Документация по типам членов
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.
Функции доступа:
| 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 (если они не являются указателями 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()
[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)
Устанавливает отступы 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 истинно, иначе отключает его.
Включенный макет динамически реагирует на изменения; отключенный макет ведет себя так, как будто его не существует.
По умолчанию все макеты включены.
См. также 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/qt-5.9/qlayout.html