Qt alignement dans QGridLayout élimine le redimensionnement de ses éléments
Ok, donc en gros j'ai une table simple avec un QWidget et deux boutons comme indiqué ci-dessous:
QGridLayout *layout = new QGridLayout;
layout->addWidget(viewcontainer,0,0,1,2);
layout->addWidget(reset,1,0);
layout->addWidget(done,1,1);
C'est en gros ce que je veux, où le "reset" et "" sont des boutons. Essentiellement, c'est un QWidget, viewcontainer, qui redimensionne la taille de la fenêtre est modifiable par l'utilisateur, tandis que les boutons " hauteurs reste le même. Mais, la valeur par défaut pour le gridlayout est d'aligner le contenu de la gauche. Si je change ce avec:
layout->addWidget(viewcontainer,0,0,1,2, Qt::AlignCenter);
Il ne sorte de ce que je veux, mais le graphicsscene n'est plus redimensionné (reste une petite taille constante). J'aimerais conserver le redimensionnement tandis que d'aligner le widget pour le centre. Merci.
OriginalL'auteur Justin | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Je pense que la solution la plus simple qui fournit une solution propre est de nid 2 mises en page.
Votre 'extérieur' (parent) mise en page doit être un QHBoxLayout et vous pouvez ajouter votre QGridLayout en elle comme un "intérieure" (enfant) mise en page avec addLayout().
Après mon expérience, vous devriez éviter de définir l'intervalle Qt::Alignment chaque fois que vous le pouvez. Il peut vraiment gâcher votre mise en page. Pour de simples dispositions cela peut fonctionner, mais pour les plus complexes, ceux que vous devriez éviter. Et vous ne savez jamais ce que vous devez étendre votre mise en page à l'avenir ou pas donc, ma suggestion est d'utiliser imbriqués les mises en page.
Bien sûr, vous pouvez créer un QWidget pour l 'extérieur' de mise en page et pour la "innser' mise en page, mais la plupart du temps, il devrait être bon pour juste nid 2 mises en page.
Vous pouvez également utiliser QSpacerItem pour affiner votre disposition.
OriginalL'auteur Viktor Benei
Ont un coup d'oeil à cet exemple de code, je pense que c'est ce que vous voulez:
Ne définissez pas de Qt::AlignCenter. Le redimensionnement fonctionne correctement si vous venez de compiler le code ci-dessus verbatim? Si oui, alors c'est une question de trouver quelle est la différence entre votre viewcontainer widget et le QGraphicsView widget dans l'exemple. Vous pourriez essayer de faire un setSizePolicy(QSizePolicy::Ignoré, QSizePolicy::Ignoré) sur votre widget ainsi, pour voir si ça va le convaincre de devenir plus grand.
Oui, je suppose que je devrais avez spécifié cela, mais je veux le widget de garder un certain ratio d'aspect à l'aide de ce code: void roilayout::resizeEvent(QResizeEvent *event) { QSize p(roiview->refimage->size()); p.échelle(viewcontainer->size(), Qt::KeepAspectRatio); viewcontainer->resize(p); } . (Désolé pour le format - je ne sais pas comment mettre en forme les commentaires de code). Mais oui, quand il change, il s'aligne à gauche.
Au lieu d'essayer d'appeler resize() sur votre widget, vous pouvez essayer de substitution de la QWidget::heightForWidth(int) méthode de la fenêtre, de sorte qu'elle renvoie toujours à une hauteur qui a le format correct pour la largeur transmis comme argument.
OriginalL'auteur Jeremy Friesner