Подтвердить что ты не робот

Создайте макет Qt с фиксированной высотой

Я хочу создать окно Qt, содержащее два макета, одну фиксированную высоту, содержащую список кнопок вверху, и один, который заполняет пространство для заметок макетом, который центрирует виджет по вертикали и горизонтали в соответствии с изображением ниже.

Example Qt layout

Как я должен раскладывать свои макеты/виджеты. Ive пробовал несколько вариантов с вложенными горизонтальными и вертикальными макетами безрезультатно

4b9b3361

Ответ 1

Попробуйте сделать розовую коробку QWidget с QHBoxLayout (а не просто сделать макет). Причина в том, что QLayouts не обеспечивают функциональность для фиксированных размеров, но QWidgets делают.

// first create the four widgets at the top left,
// and use QWidget::setFixedWidth() on each of them.

// then set up the top widget (composed of the four smaller widgets):
QWidget *topWidget = new QWidget;
QHBoxLayout *topWidgetLayout = new QHBoxLayout(topWidget);
topWidgetLayout->addWidget(widget1);
topWidgetLayout->addWidget(widget2);
topWidgetLayout->addWidget(widget3);
topWidgetLayout->addWidget(widget4);
topWidgetLayout->addStretch(1); // add the stretch
topWidget->setFixedHeight(50);

// now put the bottom (centered) widget into its own QHBoxLayout
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addStretch(1);
hLayout->addWidget(bottomWidget);
hLayout->addStretch(1);
bottomWidget->setFixedSize(QSize(50, 50));

// now use a QVBoxLayout to lay everything out
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(topWidget);
mainLayout->addStretch(1);
mainLayout->addLayout(hLayout);
mainLayout->addStretch(1);

Если вы действительно хотите иметь два отдельных макета - один для розового бокса и один для синего квадрата - идея в основном такая же, за исключением того, что вы сделаете синюю коробку в свой собственный QVBoxLayout, а затем используйте:

mainLayout->addWidget(topWidget);
mainLayout->addLayout(bottomLayout);