2015-11-09 2 views
0

J'ai un QVBoxLayout dans Wich ajouter dynamiquement l'exécution d'autres QWidget s:QLayout avec un espace minimum requis

for(int i = 0; i < value; i++) 
{ 
    QList<QWidget*> widgetList_i; 
    //... widgetList_i.append(a lot of widgets) 
    ui->verticalLayout->addWidget(widget_i); 
} 

Il y a beaucoup d'espace perdu entre ces widgets ajouté: With wasted space between dynamic QWidegts

Quand je exécuter l'application, je peux compresser la hauteur, avec la souris.

Compressed the space with dragging the border with the mouse

Limitation de chaque widgetList_i Widget heigth par setMaximumheigth() est une approche agréable, mais je espaces wasten au début et à la fin: MaximumHeigth

Ajout seulement ui->vertivalLayout->addStretch(1); causes espace vide à la fin. Le début de cette mise en page est agréable: enter image description here

question principale: est-il pas une fonction qui définit la mise en page en ce qui concerne les widgets heigth ajoutés à un minimum?
Question subsidiaire: Comment puis-je ajouter une barre de défilement verticale à ce widget?

EDIT: - Ajout d'un spaceritem aggraver: SpaceItem et ne résout pas mon problème

Répondre

1

réponse rapide

Avant votre code d'insertion mettre cette ligne

ui->verticalLayout->parentWidget()->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum); 

* aussi Vous pouvez trouver ces propriétés dans QtDesigner, assurez-vous que vous sélectionnez la mise en page et non le QDockWidget.

Explication

Les modèles n'ont pas tailles mais Widgets. La mise en page se trouve à l'intérieur d'autres widgets, vous devez donc modifier la taille du widget parent de votre mise en page. setSizePolicy modifie le comportement de taille d'un widget. Cette méthode a 2 arguments: politique horizontale et politique verticale. Vous pouvez garder horizontale comme Preferred qui est la valeur par défaut changer la politique verticale à Maximum cela signifie que la politique préférée du widget est la taille maximale.

question de côté: QScrollArea vous fournir des capacités à faire défiler des widgets. Vous pouvez envelopper votre QLayout dans un QWidget, puis dans un QScrollArea.

+0

Comme dans la capture d'écran ci-dessus, un SpaceItem dow ne fonctionne pas pour moi. –

+0

@RalfWickum Je mets à jour la réponse. Dis-moi si ça marche –

+0

Oui, ça a très bien organisé mes Widgets. Mais cela a également permis un autre problème: Maintenant, je ne peux pas redimensionner entre ces DockWidgets, signifie que je ne peux pas faire glisser et déplacer la bordure du dockwidget supérieur et celui du bas? –