2016-06-03 2 views
1

Je suis en train d'utiliser QDockWidget pour créer un composant dynamique pour l'organisation de certaines parcelles définies par l'utilisateur. Les parcelles doivent être changées dans leurs tailles et peuvent être disposées les unes sur les autres.Widget central occupe beaucoup d'espace et Dock Widgets à peu après redimensionner

L'extrait de code suivant illustre ce que je suis en train de réaliser:

#include <QApplication> 
#include <QMainWindow> 
#include <QLabel> 
#include <QDockWidget> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    auto window = new QMainWindow; 
    window->setCentralWidget(new QLabel("Central Widget")); 

    for (int i = 1; i < 9; i++) { 
     auto dock = new QDockWidget(QString("Plot %1").arg(i)); 
     dock->setWidget(new QLabel(QString("Plot %1").arg(i))); 
     dock->setAllowedAreas(Qt::AllDockWidgetAreas); 
     window->addDockWidget(Qt::BottomDockWidgetArea, dock); 
    } 

    window->show(); 
    return app.exec(); 
} 

Le widget central sert simplement comme un simple espace réservé et est juste nécessaire pour permettre glisser et en réarrangeant les QDockWidget.

Je suis déjà très satisfait du comportement obtenu en plus de un seul inconvénient. Après le redimensionnement window (en le rendant plus grand), le widget central consomme tout l'espace nouvellement gagné, alors que les DockWidgets occupent toujours le même espace comme avant.

Le comportement est décrit ci-dessous:

Application before resize

Application after resize

C'est un peu gênant pour l'utilisateur, comme le widget central est juste un espace réservé. En fait, je voulais juste avoir le comportement inverse, c'est-à-dire que le widget central devrait garder sa taille, alors que les DockWidgets devraient être agrandis.

Comment puis-je y parvenir?

Répondre

1

Redimensionnez simplement votre widget central à la taille désirée. Ou mieux encore, cachez-le (il semble que vous n'utilisiez que QDockWidget s en plus de celui-ci).

QLabel* label = new QLabel("Central Widget"); 
label->hide(); 
window->setCentralWidget(label); 
window->setDockNestingEnabled(true); 
+0

Merci pour la réponse rapide. J'ai déjà essayé de cacher le widget central. Mais alors vous n'êtes plus en mesure de faire glisser les widgets de dock autour. En outre, la définition de la taille maximale très petite (0,0) désactive la fonctionnalité de déplacement autour des widgets de la station d'accueil. – Aleph0

+0

Que voulez-vous dire que vous n'êtes plus en mesure de faire glisser les widgets de dock autour? Bien sûr, vous pouvez – IAmInPLS

+0

Si je change à 'auto label = new QLabel (" Widget central "); label-> setMaximumSize (0, 0); 'Je peux toujours faire glisser les widgets du dock. C'est correct. Maintenant, essayez d'aligner tous les widgets de gauche à droite. Après cela, vous êtes incapable d'aligner ensuite de haut en bas à nouveau. – Aleph0

0

fonctionne pour moi w/qt 5.8