2009-08-26 10 views
4

Je souhaite que mes widgets personnalisés gagnent de l'espace lorsque la boîte de dialogue est redimensionnée. Cela fonctionnait quand je n'avais qu'une poignée de widgets, mais après avoir ajouté plusieurs colonnes de ces mêmes widgets et les avoir placées dans un QGridLayout, l'espace supplémentaire entre simplement comme padding entre les widgets.Modification du comportement de redimensionnement dans les dispositions Qt

Répondre

11

J'ai eu des problèmes avec cela dans le passé et voici quelques-unes des choses que j'ai trouvé:

  1. D'abord, assurez-vous que tous les widgets que vous souhaitez développer ont sizePolicy sur « L'expansion » . Assurez-vous que les widgets qui composent vos widgets personnalisés sont dans une disposition qui permet leur extension. Vous pouvez vérifier cela en ajoutant simplement un de vos widgets personnalisés à la fenêtre et en voyant qu'il se développe comme prévu. Assurez-vous que les widgets du formulaire que vous ne voulez pas développer ont une taille fixe (minimum = maximum) dans la dimension que vous voulez qu'ils restent statiques. Parfois, la disposition de la grille provoque des problèmes d'espacement étranges car les lignes sont redimensionnées en fonction du widget le plus grand de la ligne entière et de la même manière pour les colonnes. Pour certaines dispositions, il est préférable d'utiliser une disposition verticale contenant des dispositions horizontales ou vica versa pour créer un effet de grille. Seulement de cette façon, chaque sous-disposition est espacée indépendamment des autres lignes ou colonnes.

+1

# 4 est ce que j'ai fait il y a longtemps donc merci :) –

+0

Très bonne réponse, merci! –

8

Contrôle de l'extension du réseau programatically

J'ai trouvé que vous pouvez facilement contrôler les colonnes/lignes dilatent et les colonnes/lignes restent fixes en largeur et en utilisant QGridLayout::setColumnStretch()QGridLayout::setRowStretch(). Vous devrez fournir des poids aux colonnes spécifiques (0 pour aucune extension).

Par exemple, si vous voulez la colonne 0 à ne pas prendre une chambre et la colonne 1 de prendre le reste de la salle de la fenêtre, faites ceci:

QGridLayout* layout ; 
// Set up the layout 
layout->setColumnStretch(0, 0) ; // Give column 0 no stretch ability 
layout->setColumnStretch(1, 1) ; // Give column 1 stretch ability of ratio 1 

Contrôle de l'extension du réseau à l'aide de Qt Designer

Vous pouvez faire ce que j'ai décrit ci-dessus si vous utilisez Designer. Il suffit de rechercher les propriétés du widget layoutRowStretch et layoutColumnStretch. Il contiendra une liste d'entiers séparés par des virgules.

0

Une autre option est à l'intérieur de QT Creator, pour spécifier dans le widget de mise en page de niveau supérieur de la section que vous voulez une taille mise en forme d'une dispositionSizeConstraint de "SetFixedSize". Vous devez également supprimer toutes les entretoises d'en dessous de ce widget. Dans mon cas, j'ai eu une boîte de dialogue avec un TreeWidget, une Table, et quelques trucs de sélection de couleurs. Je voulais que les contrôles de sélection de couleur restent à la même taille horizontalement, donc ils étaient dans un VerticalLayout. J'imagine que vous pouvez faire la même chose avec un HorizontalLayout aussi si vous voulez que les choses restent à la même hauteur. Si vous avez vraiment besoin d'espaceurs dans la mise en page, vous pouvez probablement utiliser des étiquettes vierges de taille fixe.

Questions connexes