На этом шаге рассмотрим вложенные размещения.
Размещая одну компоновку в другой, можно создавать размещения практически любой сложности. Для организации вложенных размещений существует метод 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.