2009-11-06 9 views
2

Pour ceux d'entre vous qui n'ont pas lu mes questoins Qt, j'apprends Qt pour un projet. Je n'ai qu'une expérience limitée avec la conception de GUI du tout, et pas dans Qt.Qt QHboxLayout taille de la cellule ssues

J'ai une disposition horizontale que je veux remplir avec quelques boutons. Je peux alimenter ces boutons très bien, mais mes boutons autrefois carrés sont étirés horizontalement pour prendre plus de place.

Je souhaite laisser le gestionnaire de disposition déterminer la meilleure façon de dimensionner ces boutons, mais je souhaite également que leurs proportions d'origine restent intactes. Par exemple, si je commence avec des boutons 32X32 qui ont besoin de rétrécir pour s'adapter à tous dans la mise en page, je veux qu'ils rétrécissent proportionnellement afin que l'échelle de largeur à hauteur soit maintenue. 20X20, 16X16, 12X12 seraient tous très bien, mais 24X16 serait un exemple de dimensions qui sont inacceptables.

J'ai bricolé avec les politiques de taille sur les boutons et les options d'étirement. Je ne vois pas, même après avoir lu les classes QPushButton et QHboxLayout, comment faire cela. Comment est-ce accompli?

Merci.

Répondre

2

Tant que je comprends la question correctement, je pense que ce que vous voulez est QBoxLayout::addStretch(). Cela va ajouter un objet d'espacement qui remplit l'espace inutilisé. Ainsi les boutons auront leur taille idéale et l'entretoise comblera le reste. Vous pouvez essayer d'expérimenter cela dans Designer, c'est plus simple que le cycle write/compile/run.

+0

qui a résolu pour moi un 'Afficher à nouveau' case à gauche de boutons OK/Annuler etc: self.horizontalLayout.addWidget (self.checkBox) self.horizontalLayout.addStretch() self.horizontalLayout.addWidget (self.buttonBox) – gseattle

+0

Après un temps considérable, j'ai fait plus avec Qt et c'est définitivement une meilleure solution. Cette question a été portée à mon attention aujourd'hui parce que c'est maintenant une «question populaire», alors j'ai eu l'occasion de la réviser et de changer mon acceptation à votre réponse. –

2

Vous devriez jeter un oeil aux réponses à this question. Ceci est un résumé de ma réponse là-bas.

Vous devez créer une dérivée personnalisée de QLayoutItem, qui remplace bool hasHeightForWidth() et int heightForWidth(int width) pour préserver le format. Vous pouvez soit passer le bouton et l'interroger, ou vous pouvez simplement définir le ratio directement. Vous devrez également vous assurer que la fonction widget() renvoie un pointeur vers le bouton approprié. Une fois cela fait, vous pouvez ajouter un élément de mise en page à une mise en page de la même manière que vous le feriez d'un widget. Lorsque votre bouton est ajouté, modifiez-le pour utiliser votre classe d'éléments de mise en page personnalisée.

Je n'ai pas encore testé cela, donc c'est une solution théorique à ce stade. Je ne connais aucun moyen de faire cette solution à travers le concepteur, si cela était souhaité.

+0

J'ai effectivement obtenu le comportement désiré en utilisant QToolButton, ce qui est essentiellement ce que je voulais de toute façon, mais cette réponse semble être la voie à suivre dans le futur. Merci. –

Questions connexes