Question Créer une mise en page Qt avec une hauteur fixe


Je veux créer une fenêtre Qt contenant deux mises en page, une hauteur fixe contenant une liste de boutons en haut et une qui remplisse l'espace restant avec une disposition qui centre un widget verticalement et horizontalement, comme illustré ci-dessous.

Example Qt layout

Comment devrais-je exposer mes dispositions / widgets. Ive essayé quelques options avec des dispositions horizontales et verticales imbriquées en vain


14
2017-08-17 14:35


origine


Réponses:


Essayez de faire de la boîte rose un QWidget avec un QHBoxLayout (plutôt que de simplement en faire une mise en page). La raison en est que QLayouts ne fournit pas de fonctionnalité pour créer des tailles fixes, mais les QWidgets le font.

// 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);

Si vous voulez vraiment avoir deux mises en page distinctes - une pour la boîte rose et une pour la boîte bleue - l'idée est fondamentalement la même sauf que vous créez la boîte bleue dans son propre QVBoxLayout, puis utilisez:

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

16
2017-08-17 16:27