На этом шаге рассмотрим табличное размещение элементов в окне.
Для табличного размещения используется класс QGridLayout, с помощью которого можно быстро создавать сложные по структуре размещения.
Таблица состоит из ячеек, позиции которых задаются строками и столбцами.
Добавить виджет в таблицу можно с помощью метода addWidget(), передав ему позицию ячейки, в которую помещается виджет.
void QGridLayout::addWidget(QWidget * widget, int row,
int column, Qt::Alignment alignment = 0)
Иногда необходимо, чтобы виджет занимал сразу несколько позиций, чего можно достичь тем же методом addWidget(), указав в дополнительных параметрах количество строк и столбцов, которые будет занимать виджет. В последнем параметре можно задать выравнивание (табл. 1), например, по центру:
playout->addWidget(widget, 17, 1, Qt::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();
}
Файлы примера можно взять здесь.
На следующем шаге рассмотрим пример создания калькулятора.