Класс 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 также включает две ширины отступов: отступ содержимого (contents margin) и отступ (spacing). Отступ содержимого — это ширина выделенного пространства по каждой из четырёх сторон QGridLayout. Отступ (spacing()) — это ширина автоматически выделенного отступа между соседними блоками.
Значения по умолчанию отступов содержимого предоставляются стилем. Значение по умолчанию, указанное стилями 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, что означает, что виджет заполняет всю ячейку.
Значение выравнивания отличное от нуля указывает, что макет не должен расширяться для заполнения доступного пространства, а должен быть размером, соответствующим 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 столбцов. widget будет иметь заданное 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.0/qgridlayout.html