Шаг 31.
Библиотека Qt.
Табличное размещение QGridLayout

    На этом шаге рассмотрим табличное размещение элементов в окне.

    Для табличного размещения используется класс QGridLayout, с помощью которого можно быстро создавать сложные по структуре размещения.

    Таблица состоит из ячеек, позиции которых задаются строками и столбцами.


ПРИМЕЧАНИЕ. Если вам нужна таблица, которая состоит из 2 столбцов, то можно воспользоваться классом QformLayout, это поможет реализовать более компактный код, чем с использованием класса QGridLayout. Добавления виджетов осуществляются вызовом метода addRow(), в который передаются сразу два виджета: виджет надписи и функциональный виджет.

    Добавить виджет в таблицу можно с помощью метода addWidget(), передав ему позицию ячейки, в которую помещается виджет.

void QGridLayout::addWidget(QWidget * widget, int row,
                            int column, Qt::Alignment alignment = 0) 

    Иногда необходимо, чтобы виджет занимал сразу несколько позиций, чего можно достичь тем же методом addWidget(), указав в дополнительных параметрах количество строк и столбцов, которые будет занимать виджет. В последнем параметре можно задать выравнивание (табл. 1), например, по центру:

playout->addWidget(widget, 17, 1, Qt::AlignCenter);

Таблица 1. Значения флагов AlignmentFlag пространства имен Qt
Константа
Описание
AlignLeft
Расположение текста слева
AlignRight
Расположение текста справа
AlignHCenter
Центровка текста по горизонтали
AlignJustify
Растягивание текста по всей ширине
AlignTop
Расположение текста вверху
AlignBottom
Расположение текста внизу
AlignVCenter
Центровка текста по вертикали
AlignCenter
Центровка теста по вертикали и горизонтали

    Фактор растяжения устанавливается методами setRowStretch() и setColumnStretch(), но не для каждого виджета в отдельности, а для строки или столбца. Расстояние между виджетами также устанавливается для столбцов или строк методом setSpacing().

    Пример, показанный на рис. 1, размещает четыре кнопки A, B, C и D в таблице размером 2 на 2 ячейки.


Рис.1. Размещение кнопок в таблице 2х2

Содержание файла будет следующим:

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QGridLayout>
int main(int argc, char** argv)
{
    //создаем приложение
    QApplication app(argc, argv);
    app.setApplicationDisplayName("Таблица");
    //создаем виджет
    QWidget wgt;
    //создаем 4 кнопки
    QPushButton* pcmdA = new QPushButton("A");
    QPushButton* pcmdB = new QPushButton("B");
    QPushButton* pcmdC = new QPushButton("C");
    QPushButton* pcmdD = new QPushButton("D");
    //создаем таблицу
    QGridLayout* gL = new QGridLayout;
    //выполняем установку параметров
    phbxLayout->setMargin(5);
    phbxLayout->setSpacing(15);
     //добавляем виджеты кнопок в ячейки таблицы
    gL->addWidget(pcmdA, 0, 0);
    gL->addWidget(pcmdB, 0, 1);
    gL->addWidget(pcmdC, 1, 0);
    gL->addWidget(pcmdD, 1, 1);
    //размещаем таблицу в виджете
    wgt.setLayout(gL);
    //отображаем виджет на экране
    wgt.show();
    return app.exec();
}

    Файлы примера можно взять здесь.

    На следующем шаге рассмотрим пример создания калькулятора.




Предыдущий шаг Содержание Следующий шаг