Question

Comment changer le comportement d'un QListWidget pour qu'il redimensionne sa hauteur au lieu de choisir une hauteur (apparemment arbitraire) et en ajoutant des barres de défilement? Voir capture d'écran:

capture d

Les années de QListView doit remplir autant d'espace horizontal car ils peuvent (créer autant de « colonnes », si vous voulez.) Ensuite, ils envelopper et faire autant de lignes que nécessaire pour répondre à tous les articles. Ces calculs doivent être ajustés que la fenêtre est redimensionnée. Tout cela est bien travailler.

Cependant, ce que je veulent pour arriver est que, au lieu de la hauteur restant la même, la QListView devrait augmenter ou diminuer verticalement et jamais besoin de barres de défilement. Le défilement, le cas échéant, sera traitée sur la QWidget mère que tous les hôtes des étiquettes et des listes. Il semble que, une fois la hauteur de la QListWidget est établie (pas sûr où sa valeur par défaut vient), il ne change jamais. Il est trop grand dans certains cas (voir la deuxième liste « Test » ci-dessus) et trop petit dans d'autres (voir première liste « cartes muettes » ci-dessus.)

La mise en page est rien d'étonnant au-dessus: deux de QLabel et deux dans un QListWidget de QVBoxLayout. Voici les propriétés que je l'ai mis sur le QListWidget:

setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));

(je l'ai déjà essayé de placer les politiques de scrollbar horizontale et verticale, mais qui tourne juste la barre de défilement au large, clipping le contenu. Pas ce que je veux.)

Était-ce utile?

La solution

Peut-être que vous pourriez cela sans l'aide QListWidget. Les exemples de Qt contiennent une nouvelle classe de mise en page, QFlowLayout, ce qui pourrait être utile. Avec la hiérarchie type de widget suivant, vous pouvez obtenir plusieurs groupes avec des étiquettes et tous serait à l'intérieur d'un QScrollArea.

QScrollBox
  QVBoxLayout

    QLabel "Blank maps"
    QWidget
       QFlowLayout
          your own widgets showing map images and labels

    QLabel "Text"
    QWidget
       QFlowLayout
          your own widgets

Le problème est que ce genre de solution créerait beaucoup plus de widgets que solution QListWidget. Donc, si vous avez des centaines d'articles dans votre liste, cela pourrait ne pas être la meilleure solution.

Autres conseils

Il y a une fonction membre protégée appelée contentsSize() en QListView. Il est utilisé pour calculer la minimum() nécessaire, maximum() et pageStep() pour les barres de défilement (comme mentionné ici ).

Pouvez-vous sous-classe la classe QListView et de faire usage de cette information? Je vous suggère de recalculer la taille de votre widget dans la même fonction vous permet d'ajouter le contenu à lui. Alors que l'élégance un peu défaut, cela semble être une solution assez fiable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top