Comment faire grandir un widget Qt avec la taille de la fenêtre?

88

Je veux avoir un petit QFormLayoutqui grandit pour remplir son widget parent.

J'ai créé un nouveau fichier .ui en utilisant le QWidgetmodèle dans Qt Designer. J'ai mis une à l' QFormLayoutintérieur de cette «fenêtre», puis j'ai mis des commandes à l'intérieur QFormLayout.

Tout cela fonctionne assez bien, mais le QFormLayoutreste toujours à la taille que j'ai définie dans Qt Designer. Je voudrais que le QFormLayoutremplisse son widget parent et grandisse / rétrécisse avec lui.

Comment puis-je y parvenir?

Bastibe
la source

Réponses:

129

Dans Designer, activez le centralWidget et attribuez une mise en page, par exemple une mise en page horizontale ou verticale. Ensuite, votre QFormLayout se redimensionnera automatiquement.

Image du designer

Assurez-vous toujours que tous les widgets ont une mise en page! Sinon, le redimensionnement automatique rompra avec ce widget!

Voir également

Les contrôles insistent pour être trop volumineux et ne seront pas redimensionnés dans QtDesigner

Jens
la source
13
QtDesigner peut parfois être un peu déroutant.
bastibe
29
oh, MERCI pour ça! :-) J'ai regardé QtDesigner (enfin, QtCreator, même chose là-bas cependant) pendant une demi-heure et je ne pouvais pas comprendre pourquoi mon widget central ne se redimensionnait pas au maximum - jusqu'à ce que j'ai repéré que la petite icône vous encerclé dans votre réponse a une marque rouge «désactivé» dessus. un clic sur le bouton «disposer verticalement» dans la barre d'outils du créateur et le problème est résolu. Première fois que je remarque que la barre d'outils BTW, facile à oublier ...
ssc
7
Pour commenter la réponse de Jens: Sur le mac, cliquez sur le widget de premier niveau (pas nécessairement nommé "centralWidget") puis cliquez sur "Form" dans la barre de menu et sélectionnez l'une des mises en page.
hnasarat
2
Si quelqu'un se demande encore, cela se fait sous Windows dans QT5.8 / QT Creator 4.2.1 en cliquant sur le niveau supérieur "centralWidget" (qui a une petite marque rouge dessus) puis en allant dans Outils> Éditeur de formulaire> Mise en page Verticalement (ou horizontalement).
LeoR
41

J'ai trouvé qu'il était impossible d'attribuer une mise en page au widget central avant d'avoir ajouté au moins un enfant en dessous. Ensuite, je pourrais mettre en évidence la petite icône avec la marque rouge «désactivé», puis cliquer sur une mise en page dans la barre d'outils Designer en haut.

Jillian Beuschel Marohnic
la source
4
C'est exaspérant. Attribuer une mise en page au widget central devrait être l'opération la plus simple de Qt Creator. , Il faut pour cela au lieu de combiner cette solution hautement unintuitive avec Jens ' solution tout aussi peu intuitive ( dans cet ordre exact ). Alors que l'automatisation fournie par Qt Creator bat toujours de loin les passe-partout répétitifs, le piratage autour de son expérience utilisateur épouvantable (UX) m'a donné un nouveau coup d'œil.
Cecil Curry
@Cecil Curry même après cette solution, il m'a fallu 20 minutes pour réaliser ce que je devrais ... parce que centralWidget dans le seul cas où il n'y a pas d'option de menu contextuel pour ajouter une mise en page ... seulement un bouton micriscopique dans la barre d'outils qui ressemble presque à un inactif
Swift - Friday Pie
3
En écrivant ce commentaire car même après les solutions ici, j'ai eu du mal à trouver l'option. Vous devez sélectionner le centralWidget, puis cliquez avec le bouton droit de la souris dans un espace libre de votre application, allez dans `` Mise en page '' dans le menu contextuel qui s'est ouvert, puis sélectionnez la mise en page souhaitée. Cela a fonctionné pour moi, au moins (QT5, en utilisant QT Designer 5.11.1).
kushy
10

La réponse acceptée (son image) est fausse, du moins maintenant dans QT5. Au lieu de cela, vous devez attribuer une mise en page à l'objet / widget racine (pointant vers l'image susmentionnée, ce devrait être la MainWindowplace de centralWidget). Notez également que vous devez avoir au moins un QObjectcréé en dessous pour que cela fonctionne. Faites cela et votre interface utilisateur deviendra sensible au redimensionnement de la fenêtre.

Nikos
la source
0

Vous devez changer le type de mise en page par défaut de l'objet QWidget de niveau supérieur du type de mise en page Saut à d'autres types de mise en page (mise en page verticale, mise en page horizontale, mise en page de grille, mise en page de formulaire). Par exemple: entrez la description de l'image ici

À quelque chose comme ça:

entrez la description de l'image ici

Linh Dao
la source