web-dev-qa-db-fra.com

Disposition Qt sur QMainWindow

J'ai conçu un QMainWindow avec QtCreator's designer. Il se compose du widget central par défaut (un QWidget) qui contient un QVBoxLayout avec tous les autres widgets qu'il contient. Maintenant, tout ce que je veux, c'est que le QVBoxLayout occupe automatiquement tout l'espace rectangle des widgets centraux.

Comment puis-je faire ceci? Je n'ai trouvé aucune propriété utilisable ni dans les propriétés des widgets centraux ni dans le QVBoxLayout's ceux.

34
Milan

Vous n'avez pas besoin de créer un QVBoxLayout manuellement. Sélectionnez simplement votre QWidget central et appuyez sur un bouton de création de mise en page.

alt text

41
Georg Schölly

Si vous voulez le faire avec du code au lieu d'utiliser QtCreator, vous pouvez définir la disposition dans un QWidget, puis définir le QWidget comme widget central de la fenêtre principale comme cette:

#include <QtGui>
#include <QWidget>
#include <QHBoxLayout>
#include "mainwindow.h"

MainWindow::MainWindow() {  

        // Set layout
        QHBoxLayout *layout = new QHBoxLayout;
        layout->addWidget(myWidget1);
        layout->addWidget(myWidget2);

        // Set layout in QWidget
        QWidget *window = new QWidget();
        window->setLayout(layout);

        // Set QWidget as the central layout of the main window
        setCentralWidget(window);

}
68

Ajoutez au moins un widget sur votre MainWindow. Sélectionnez ensuite votre fenêtre en cliquant dessus et cliquez sur le bouton VerticalLayout en haut de QTCreator. Votre disposition verticale est automatiquement ajoutée au widget central et remplit toute la surface.

13

C'est déjà répondu, mais je préfère personnellement garder tous les éléments de contrôle et mises en page ajoutées manuellement au formulaire. Je n'ajoute pas de contrôles dans les fichiers de classe, je connecte simplement les signaux/emplacements pour masquer/afficher les widgets pertinents pour la logique de la classe, au sein de la classe.

Pour ajouter manuellement une mise en page à n'importe quel widget, vous devez d'abord ajouter au moins un widget/contrôle enfant. Ce n'était pas totalement clair pour moi et j'essayais d'abord d'ajouter la mise en page.

3
Rachael