12
votes

Dans Qt, comment puis-je aligner des éléments de forme dans différentes boîtes de groupe?

J'essaie de créer un formulaire standard à deux colonnes, où la première colonne est une étiquette de texte ( qlabel ) et la deuxième colonne est un widget interactif, typiquement un champ de texte ( QLineDit ). Nous avons décidé de placer des lignes de format qui partagent un thème commun à l'intérieur d'un qgroupbox , et donc dans une mise en page distincte que la disposition principale. Ainsi, les éléments de forme à l'intérieur de chaque qgroupbox n'alignent pas horizontalement avec les éléments de formulaire en dehors du qgroupbox es.

Comment puis-je utiliser des boîtes de groupe et des mises en page d'une manière telle que le qlabel s et s QLineDIT s à la fois à l'intérieur et à l'extérieur Les boîtes de groupe sont (horizontalement) alignées les unes avec les autres ?

merci!


0 commentaires

4 Réponses :


1
votes

Je ne pense pas que cela fonctionnera avec des ensembles de mises en page horizontale et verticale imbriquée. Avez-vous envisagé un QGriDlayout ?


1 commentaires

J'ai besoin d'éléments de forme dans différentes boîtes de groupe, alors malheureusement, je vais avoir besoin de mises en page différentes / imbriquées. J'utilise déjà qgridlayout , en fait!



0
votes

Utilisez la séchée () pour forcer toutes vos colonnes à la même largeur


1 commentaires

Cela ne serait-il pas une politique de mise en page?



5
votes

Vous pouvez définir la propriété minimumWidth sur toutes les étiquettes à l'intérieur des boîtes de groupe sur quelque chose qui est juste assez large pour afficher l'étiquette la plus large. Cela obtiendra toutes les étiquettes dans les différentes boîtes de groupe alignées.

Maintenant, pour obtenir les étiquettes à l'extérieur des boîtes groupées alignées sur celles de l'intérieur: je suppose d'abord que chaque paire d'étiquettes / ligneDedit est dans sa propre présentation horizontale ou que vous avez plusieurs rangées à l'intérieur d'une grille. Dans les deux cas, ce que vous pouvez faire est de définir le minimumWidth des étiquettes sur la même valeur que les étiquettes des groupes de groupe. Enfin, ajustez les propriétés de layoutleftmargin, de layouTrightMargin et de la mise en page sur la disposition horizontale (ou de la grille) jusqu'à ce que les bords droit et gauche de la paire d'étiquettes / ligne alignez avec celles à l'intérieur des boîtes de groupe.

Si vous n'utilisez pas déjà l'éditeur de formulaire dans Qt Creator, ou Qt Designer, pour construire votre interface utilisateur, j'ai trouvé cela pour rendre cette tâche assez facile.

Je dois admettre que cela ressemble un peu de kludgey, mais dans le cas de test simple, j'ai construit, cela semblait travailler d'accord. D'autre part, cela semble susceptible de casser si l'utilisateur modifie la taille de la police. Peut-être qu'il y a une meilleure façon?

J'espère que cela aide.


2 commentaires

Je vais donner cela un coup de feu - je vous ferai savoir comment ça se passe.


Je n'ai pas essayé le deuxième composant, mais je peux vous dire que la définition de la largeur minimale des étiquettes dans les boîtes de groupe de niveau supérieur a fonctionné comme par magie. Voir ma propre réponse pour pseudocode.



1
votes

Kenrogers a fourni la solution et voici un code incomplet que j'ai utilisé pour le faire fonctionner: xxx


0 commentaires