Класс QGridLayout
Класс QGridLayout размещает виджеты в таблице. Подробнее...
| Заголовок: | #include <QGridLayout> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Наследует: | QLayout |
Свойства
- horizontalSpacing : int
- verticalSpacing : int
Открытые функции
| QGridLayout(QWidget *parent = nullptr) | |
| virtual | ~QGridLayout() |
| void | addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment()) |
| void | addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment()) |
| void | addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()) |
| void | addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment()) |
| void | addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment()) |
| QRect | cellRect(int row, int column) const |
| int | columnCount() const |
| int | columnMinimumWidth(int column) const |
| int | columnStretch(int column) const |
| void | getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const |
| int | horizontalSpacing() const |
| QLayoutItem * | itemAtPosition(int row, int column) const |
| Qt::Corner | originCorner() const |
| int | rowCount() const |
| int | rowMinimumHeight(int row) const |
| int | rowStretch(int row) const |
| void | setColumnMinimumWidth(int column, int minSize) |
| void | setColumnStretch(int column, int stretch) |
| void | setHorizontalSpacing(int spacing) |
| void | setOriginCorner(Qt::Corner corner) |
| void | setRowMinimumHeight(int row, int minSize) |
| void | setRowStretch(int row, int stretch) |
| void | setVerticalSpacing(int spacing) |
| int | verticalSpacing() const |
Переопределённые открытые функции
| virtual int | count() const override |
| virtual Qt::Orientations | expandingDirections() const override |
| virtual bool | hasHeightForWidth() const override |
| virtual int | heightForWidth(int w) const override |
| virtual void | invalidate() override |
| virtual QLayoutItem * | itemAt(int index) const override |
| virtual QSize | maximumSize() const override |
| virtual int | minimumHeightForWidth(int w) const override |
| virtual QSize | minimumSize() const override |
| virtual void | setGeometry(const QRect &rect) override |
| virtual void | setSpacing(int spacing) override |
| virtual QSize | sizeHint() const override |
| virtual int | spacing() const override |
| virtual QLayoutItem * | takeAt(int index) override |
Переопределённые защищённые функции
| virtual void | addItem(QLayoutItem *item) override |
Подробное описание
QGridLayout занимает предоставленное ему пространство (родительским макетом или parentWidget()), разбивает его на строки и столбцы и помещает каждый управляемый виджет в соответствующую ячейку.
Столбцы и строки ведут себя одинаково; мы будем обсуждать столбцы, но существуют эквивалентные функции для строк.
Каждый столбец имеет минимальную ширину и коэффициент растяжения. Минимальная ширина является максимальной из заданных с помощью setColumnMinimumWidth() и минимальной ширины каждого виджета в этом столбце. Коэффициент растяжения устанавливается с помощью setColumnStretch() и определяет, сколько доступного пространства получит столбец сверх необходимого минимума.
Обычно каждый управляемый виджет или макет помещается в отдельную ячейку с помощью addWidget(). Также возможно, чтобы виджет занимал несколько ячеек, используя перегрузки addItem() и addWidget() с указанием размаха по строкам и столбцам. В этом случае QGridLayout попытается распределить размер по столбцам/строкам (на основе коэффициентов растяжения).
Для удаления виджета из макета вызовите removeWidget(). Вызов QWidget::hide() на виджете также эффективно удаляет виджет из макета до тех пор, пока не будет вызвано QWidget::show().
На этом рисунке показан фрагмент диалогового окна с сеткой из пяти столбцов и трех строк (сетка показана поверх в пурпурном цвете):
Столбцы 0, 2 и 4 в этом фрагменте диалога состоят из QLabel, QLineEdit и QListBox. Столбцы 1 и 3 являются заполнителями, созданными с помощью setColumnMinimumWidth(). Строка 0 состоит из трех объектов QLabel, строка 1 из трех объектов QLineEdit, а строка 2 из трех объектов QListBox. Мы использовали столбцы-заполнители (1 и 3), чтобы обеспечить нужное расстояние между столбцами.
Обратите внимание, что столбцы и строки не имеют одинаковой ширины или высоты. Если вы хотите, чтобы два столбца имели одинаковую ширину, вы должны самостоятельно задать их минимальные ширины и коэффициенты растяжения. Для этого используйте setColumnMinimumWidth() и setColumnStretch().
Если QGridLayout не является макетом верхнего уровня (т. е. не управляет всей областью виджета и его дочерними элементами), вы должны добавить его в макет родителя, когда создаёте его, но до того, как выполните какие-либо действия с ним. Обычный способ добавления макета — вызов addLayout() на родительском макете.
После добавления макета вы можете начать размещать виджеты и другие макеты в ячейках вашего сеткообразного макета, используя addWidget(), addItem() и addLayout().
QGridLayout также включает две ширины отступов: отступ содержимого и расстояние. Отступ содержимого — это ширина зарезервированного пространства по каждой из четырёх сторон QGridLayout. Расстояние() — это ширина автоматически выделенного пространства между соседними блоками.
Значения отступа содержимого по умолчанию предоставляются стилем. Значение по умолчанию, указанное стилями Qt, составляет 9 для дочерних виджетов и 11 для окон. Расстояние по умолчанию равно ширине отступа для макета верхнего уровня или ширине отступа родительского макета.
См. также QBoxLayout, QStackedLayout, Управление макетами и Пример основных макетов.
Документация по свойствам
horizontalSpacing : int
Это свойство содержит расстояние между виджетами, расположенными бок о бок
Если значение не установлено явно, горизонтальное расстояние макета наследуется от родительского макета или из настроек стиля для родительского виджета.
Функции доступа:
| int | horizontalSpacing() const |
| void | setHorizontalSpacing(int spacing) |
См. также verticalSpacing, QStyle::pixelMetric() и PM_LayoutHorizontalSpacing.
verticalSpacing : int
Это свойство содержит расстояние между виджетами, расположенными друг над другом
Если значение не установлено явно, вертикальное расстояние макета наследуется от родительского макета или из настроек стиля для родительского виджета.
Функции доступа:
| int | verticalSpacing() const |
| void | setVerticalSpacing(int spacing) |
См. также horizontalSpacing, QStyle::pixelMetric() и PM_LayoutHorizontalSpacing.
Документация по членам-функциям
QGridLayout::QGridLayout(QWidget *parent = nullptr)
Создаёт новый QGridLayout с родительским виджетом parent. Изначально макет имеет одну строку и один столбец и будет расширяться при вставке новых элементов.
Макет устанавливается непосредственно в качестве макета верхнего уровня для parent. Для виджета может быть только один макет верхнего уровня. Он возвращается функцией QWidget::layout().
Если parent равен nullptr, то вы должны вставить этот сеткообразный макет в другой макет или установить его в качестве макета виджета, используя QWidget::setLayout().
См. также QWidget::setLayout().
[virtual] QGridLayout::~QGridLayout()
Удаляет сеткообразный макет. Управление геометрией прекращается, если это макет верхнего уровня.
Виджеты макета не удаляются.
void QGridLayout::addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
Добавляет item в позицию row, column, занимая rowSpan строк и columnSpan столбцов, и выравнивает его в соответствии с alignment. Если rowSpan и/или columnSpan равно -1, то элемент будет расширяться до нижнего и/или правого края соответственно. Макет принимает владение над item.
Предупреждение: Не используйте эту функцию для добавления дочерних макетов или дочерних виджетов. Используйте addLayout() или addWidget() вместо этого.
[override virtual protected] void QGridLayout::addItem(QLayoutItem *item)
Реализует: QLayout::addItem(QLayoutItem *item).
void QGridLayout::addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
Размещает layout в позиции (row, column) в сетке. Левый верхний угол находится в позиции (0, 0).
Выравнивание задаётся параметром alignment. Значение по умолчанию 0, что означает, что виджет заполнит всю ячейку.
Ненольвое значение alignment означает, что макет не должен расширяться до заполнения доступного пространства, но должен быть размером в соответствии с sizeHint().
layout становится дочерним элементом сеткообразного макета.
void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
Это перегруженная функция.
Этот вариант добавляет макет layout в сетку ячеек, занимая несколько строк/столбцов. Ячейка будет начинаться с row, column, занимая rowSpan строк и columnSpan столбцов.
Если rowSpan и/или columnSpan равно -1, то макет будет расширяться до нижнего и/или правого края соответственно.
void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
Добавляет данный widget в сетку ячеек в row, column. Левый верхний угол по умолчанию (0, 0).
Выравнивание задаётся параметром alignment. Значение по умолчанию 0, что означает, что виджет заполнит всю ячейку.
void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
Это перегруженная функция.
Этот вариант добавляет данный widget в сетку ячеек, занимая несколько строк/столбцов. Ячейка будет начинаться с fromRow, fromColumn, занимая rowSpan строк и columnSpan столбцов. Виджет будет иметь заданное alignment.
Если rowSpan и/или columnSpan равно -1, то виджет будет расширяться до нижнего и/или правого края соответственно.
QRect QGridLayout::cellRect(int row, int column) const
Возвращает геометрию ячейки со строкой row и столбцом column в сетке. Возвращает недействительный прямоугольник, если row или column находятся вне сетки.
Предупреждение: в текущей версии Qt эта функция не возвращает корректные результаты до тех пор, пока не был вызван setGeometry(), т.е. после того, как parentWidget() стал видимым.
int QGridLayout::columnCount() const
Возвращает количество столбцов в этой сетке.
int QGridLayout::columnMinimumWidth(int column) const
Возвращает отступ столбца для столбца column.
См. также setColumnMinimumWidth().
int QGridLayout::columnStretch(int column) const
Возвращает коэффициент растяжения для столбца column.
См. также setColumnStretch().
[override virtual] int QGridLayout::count() const
Реализует: QLayout::count() const.
[override virtual] Qt::Orientations QGridLayout::expandingDirections() const
Реализует: QLayout::expandingDirections() const.
void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
Возвращает информацию о позиции элемента с заданным index.
Переменные, переданные как row и column, обновляются с позицией элемента в макете, а переменные rowSpan и columnSpan обновляются с вертикальным и горизонтальным размахом элемента.
См. также itemAtPosition() и itemAt().
[override virtual] bool QGridLayout::hasHeightForWidth() const
Реализует: QLayoutItem::hasHeightForWidth() const.
[override virtual] int QGridLayout::heightForWidth(int w) const
Реализует: QLayoutItem::heightForWidth(int) const.
[override virtual] void QGridLayout::invalidate()
Реализует: QLayout::invalidate().
[override virtual] QLayoutItem *QGridLayout::itemAt(int index) const
Реализует: QLayout::itemAt(int index) const.
QLayoutItem *QGridLayout::itemAtPosition(int row, int column) const
Возвращает элемент макета, занимающий ячейку (row, column), или nullptr если ячейка пуста.
См. также getItemPosition() и indexOf().
[override virtual] QSize QGridLayout::maximumSize() const
Реализует: QLayout::maximumSize() const.
[override virtual] int QGridLayout::minimumHeightForWidth(int w) const
Реализует: QLayoutItem::minimumHeightForWidth(int w) const.
[override virtual] QSize QGridLayout::minimumSize() const
Реализует: QLayout::minimumSize() const.
Qt::Corner QGridLayout::originCorner() const
Возвращает угол, используемый для начала координат сетки, т.е. для позиции (0, 0).
См. также setOriginCorner().
int QGridLayout::rowCount() const
Возвращает количество строк в этой сетке.
int QGridLayout::rowMinimumHeight(int row) const
Возвращает минимальную ширину, заданную для строки row.
См. также setRowMinimumHeight().
int QGridLayout::rowStretch(int row) const
Возвращает коэффициент растяжения для строки row.
См. также setRowStretch().
void QGridLayout::setColumnMinimumWidth(int column, int minSize)
Устанавливает минимальную ширину столбца column в minSize пикселей.
См. также columnMinimumWidth() и setRowMinimumHeight().
void QGridLayout::setColumnStretch(int column, int stretch)
Устанавливает коэффициент растяжения столбца column в stretch. Первый столбец имеет номер 0.
Коэффициент растяжения относится к другим столбцам в этой сетке. Столбцы с более высоким коэффициентом растяжения занимают больше доступного места.
Значение по умолчанию для коэффициента растяжения — 0. Если коэффициент растяжения равен 0, и ни один другой столбец в этой таблице не может расти, столбец все равно может расти.
Альтернативный подход — добавление отступов с помощью addItem() с QSpacerItem.
См. также columnStretch() и setRowStretch().
[override virtual] void QGridLayout::setGeometry(const QRect &rect)
Реализует: QLayout::setGeometry(const QRect &r).
void QGridLayout::setOriginCorner(Qt::Corner corner)
Устанавливает угол начала координат сетки, т.е. позицию (0, 0), в corner.
См. также originCorner().
void QGridLayout::setRowMinimumHeight(int row, int minSize)
Устанавливает минимальную высоту строки row в minSize пикселей.
См. также rowMinimumHeight() и setColumnMinimumWidth().
void QGridLayout::setRowStretch(int row, int stretch)
Устанавливает коэффициент растяжения строки row в stretch. Первая строка имеет номер 0.
Коэффициент растяжения относится к другим строкам в этой сетке. Строки с более высоким коэффициентом растяжения занимают больше доступного места.
Значение по умолчанию для коэффициента растяжения — 0. Если коэффициент растяжения равен 0, и ни одна другая строка в этой таблице не может расти, строка все равно может расти.
См. также rowStretch(), setRowMinimumHeight() и setColumnStretch().
[override virtual] void QGridLayout::setSpacing(int spacing)
Реализует функцию доступа к свойству: QLayout::spacing.
Эта функция устанавливает вертикальный и горизонтальный отступ в spacing.
См. также spacing(), setVerticalSpacing() и setHorizontalSpacing().
[override virtual] QSize QGridLayout::sizeHint() const
Реализует: QLayoutItem::sizeHint() const.
[override virtual] int QGridLayout::spacing() const
Реализует функцию доступа к свойству: QLayout::spacing.
Если вертикальный отступ равен горизонтальному отступу, эта функция возвращает это значение; в противном случае возвращает -1.
См. также setSpacing(), verticalSpacing() и horizontalSpacing().
[override virtual] QLayoutItem *QGridLayout::takeAt(int index)
Реализует: QLayout::takeAt(int index).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qgridlayout.html