На этом шаге рассмотрим табличное размещение элементов в окне.
Для табличного размещения используется класс 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(); }
Файлы примера можно взять Предыдущий шаг
Содержание
Следующий шаг