На этом шаге рассмотрим вложенные размещения.
Размещая одну компоновку в другой, можно создавать размещения практически любой сложности. Для организации вложенных размещений существует метод addLayout(), в который вторым параметром передается фактор растяжения для добавляемой компоновки.
На рис. 1 показан пример вложенного размещения двух менеджеров компоновки. В компоновку QVBoxLayout помещается компоновка QHBoxLayout.
Рис.1. Вложенное размещение
#include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout> int main(int argc, char** argv) { QApplication app(argc, argv); app.setApplicationDisplayName("Вложенное размещение"); QWidget wgt; QPushButton* pcmdA = new QPushButton("A"); QPushButton* pcmdB = new QPushButton("B"); QPushButton* pcmdC = new QPushButton("C"); QPushButton* pcmdD = new QPushButton("D"); QVBoxLayout* pvbxLayout = new QVBoxLayout; QHBoxLayout* phbxLayout = new QHBoxLayout; phbxLayout->setMargin(5); phbxLayout->setSpacing(15); //В горизонтальную компоновку //добавляем виджеты кнопок pcmdC и pcmdD phbxLayout->addWidget(pcmdC); phbxLayout->addWidget(pcmdD); pvbxLayout->setMargin(5); pvbxLayout->setSpacing(15); //Виджеты кнопок pcmdA и pcmdB по очереди передаются //в метод QLayout::addWidget() вертикальной компоновки pvbxLayout pvbxLayout->addWidget(pcmdA); pvbxLayout->addWidget(pcmdB); //При помощи метода QBoxLayout:: addLayout() //передается объект горизонтальной компоновки phbxLayout pvbxLayout->addLayout(phbxLayout); //Вызов метода QWidget::setLayout() устанавливает //вертикальную компоновку pvbxLayout в виджете wgt wgt.setLayout(pvbxLayout); wgt.show(); return app.exec(); }
Файлы примера можно взять здесь.
На следующем шаге рассмотрим табличное размещение QGridLayout.