2010-11-15 6 views
0

Im mettre en œuvre un widget qui est essentiellement une liste de boutons (qui représentent une structure de fichiers). Il ressemble à ceci:Qt problème de mise en page

[[recentFolder] // bar 
[(stretch) 
[folderA],   // foo 
[folderB],   // programs 
[folderC],   // c: 
(stretch)] 
[rootDir]]   // my computer 

J'espère que vous pouvez voir les trois widgets dans ma mise en page: Un folderbutton pour le dossier le plus récent en haut, un folderbutton pour le dossier racine au fond et un widget qui affiche beaucoup folderbuttons au milieu. Tous les boutons de dossier ont une largeur et une hauteur fixes. J'ai ajouté des zones étirées en haut/bas du widget central parce que c'est le seul widget qui devrait être capable de redimensionner (politique d'expansion en hauteur). Mais quand je redimensionne le widget parent, il ressemble à ceci:

[[recentFolder] // bar 
// empty space does not 
// belong to any child 
[(stretch) 
[folderA],   // foo 
[folderB],   // programs 
[folderC],   // c: 
(stretch)] 
// empty space does not 
// belong to any child 
[rootDir]]   // my computer 

ce qui signifie que le widget central ne reçoit aucun événement de redimensionnement. Je dois remettre à la côte comme ça:

[[recentFolder] // bar 
[ 
// child was resized 
(stretch) 
[folderA],   // foo 
[folderB],   // programs 
[folderC],   // c: 
(stretch) 
// child was resized 
] 
[rootDir]]   // my computer 

Comme vous pouvez (si) voir, mes zones d'étirement ont aucun effet et ne fonctionnent pas comme je thougth ils le feraient. Im venant de .NET et manqué la manière dont je pourrais ancrer des contrôles dans le parent ainsi ils emploient tout l'espace existant. Une idée de comment faire cela dans Qt 4?

En ce moment, j'appelle setGeometry() sur mon enfant central dans l'événement de redimensionnement des parents, qui fonctionne mais contourne le gestionnaire de disposition.

+0

Qu'est-ce que (étirer), est-ce QSpacer? Si c'est le cas, supprimez-les et définissez correctement les facteurs d'étirement sur trois widgets. – alxx

+0

Oui, c'est un QSpacer. J'ai déjà essayé .setStretch et .setStretchFactor, mais sans succès. Ça me rend fou! :/ – atamanroman

+0

Le but de QSpacer est d'ajouter de l'espace vide, comme il l'a fait. Comment définissez-vous les facteurs d'étirement, avez-vous essayé 0 pour recentFolder et rootDir et 1 pour trois boutons intérieurs? – alxx

Répondre

1

après quelques jours de graves wtf !? J'ai découvert la raison pour laquelle mes widgets n'ont pas été redimensionnés correctement. Je ne sais toujours pas pourquoi cela arrive, donc si quelqu'un a eu la gentillesse de me l'expliquer, sa réponse sera marquée comme correcte au lieu de la mienne. Dès

QVBoxLayout* layout = new QVBoxLayout(); 
this->setLayout(layout); 
layout->addWidget(recent, 0, Qt::AlignTop | Qt::AlignCenter); 
layout->addWidget(list, 1, Qt::AlignTop | Qt::AlignCenter); 
layout->addWidget(root, 0, Qt::AlignTop | Qt::AlignCenter); 

:

faits:

  • politiques de taille étaient correctes
  • facteurs d'étirement étaient corrects

J'ai ajouté les trois widgets sur mon widget principal comme celui-ci comme j'ai enlevé les trucs d'alignement, tout fonctionne comme prévu:

QVBoxLayout* layout = new QVBoxLayout(); 
this->setLayout(layout); 
layout->addWidget(recent); 
layout->addWidget(list); 
layout->addWidget(root);