Грид QGridLayout

Последнее обновление: 08.12.2023

Класс QGridLayout позволяет организовать сетку виджетов. Для этого он определяет ряд методов, основные из них:

  • QRect cellRect(int row, int column): получает ячейку грида, которая находится на пересечении строки row и столбца column

  • int columnCount(): возвращает количество столбцов

  • int columnMinimumWidth(int column): возвращает минимальную ширину столбца

  • int columnStretch(int column): возвращает фактор растяжения столбца

  • int horizontalSpacing(): возвращает горизонтальнае отступы между элементами

  • int rowCount(): возвращает количество строк

  • int rowMinimumHeight(int row): устанавливает минимальную высоту строки

  • int rowStretch(int row): возвращает растяжение строки

  • 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(): возвращает вертикальные отступы между элементами

Кроме того, класс QGridLayout переопределяет метод addWidget(), позволяя настроить расположение виджета при добавлении:

void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

Первая версия метода добавляет виджет widget в ячейку, которая находится в строке с индексом row и столбце с индексом column. И также позволяет установить выравнивание виджета в ячейке.

Вторая версия позволяет растянуть виджет на несколько ячеек. Для этого с помощью параметра fromRow можно указать индекс начальной строки, а с помощью rowSpan - количество строк, на которые растягивается виджет. Аналогично параметр fromColumn устанавливает индекс начального столбца, а columnSpan - количество столбцов, на которые растягивается виджет.

По умолчанию при добавлении каждый виджет помещается на новую строку:

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget* widget = new QWidget;
    widget -> setWindowTitle("METANIT.COM");
    widget->setMinimumWidth(250);
    widget->setMinimumHeight(150);

    QPushButton *btn1 = new QPushButton("Button 1");
    QPushButton *btn2 = new QPushButton("Button 2");
    QPushButton *btn3 = new QPushButton("Button 3");

    QGridLayout *layout = new QGridLayout(widget);
    layout->addWidget(btn1);
    layout->addWidget(btn2);
    layout->addWidget(btn3);

    widget->show();
    return app.exec();
}
QGridLayout и создание грида в Qt

Теперь добавим кнопки в определенные строки и столбцы:

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget* widget = new QWidget;
    widget -> setWindowTitle("METANIT.COM");
    widget->setMinimumWidth(250);
    widget->setMinimumHeight(150);

    QPushButton *btn1 = new QPushButton("Button 1");
    QPushButton *btn2 = new QPushButton("Button 2");
    QPushButton *btn3 = new QPushButton("Button 3");

    QGridLayout *layout = new QGridLayout(widget);
    layout->addWidget(btn1,0,0);
    layout->addWidget(btn2,0, 1);
    layout->addWidget(btn3, 1,1);

    widget->show();
    return app.exec();
}

Здесь первая кнопка добавляется в самую первую ячейку (строка и столбец с индексом 0). Вторая кнопка добавляется в строку с индексом 0 и столбец с индексом 1. Третья кнопка добавляется в во вторую строку и второй столбец.

Добавление элементов в грид QGridLayout в Qt

То есть в итоге у нас получается две строки и два столбца, которые образуют четыре ячейки. Три виджета занимают каждый свою ячейку, поэтому одна ячейка остается незанятой.

Теперь используем другую версию метода addWidget() и растянем третью кнопку на два столбца:

#include <QApplication>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QWidget* widget = new QWidget;
    widget -> setWindowTitle("METANIT.COM");
    widget->setMinimumWidth(250);
    widget->setMinimumHeight(150);

    QPushButton *btn1 = new QPushButton("Button 1");
    QPushButton *btn2 = new QPushButton("Button 2");
    QPushButton *btn3 = new QPushButton("Button 3");

    QGridLayout *layout = new QGridLayout(widget);
    layout->addWidget(btn1,0,0);
    layout->addWidget(btn2,0, 1);
    layout->addWidget(btn3, 1,0,1,2);

    widget->show();
    return app.exec();
}

Здесь третья кнопка помещается в ячейку на пересечении второй строки и первого столбца и растягивается на 1 строку (то есть по факту не растягивается) и на 2 столбца:

layout->addWidget(btn3, 1,0,1,2);
Растяжение элементов в гриде QGridLayout в Qt
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850