QListWidget, die anstelle von Rollen passt die Größe
-
02-10-2019 - |
Frage
Wie kann man das Verhalten eines QListWidget
ändern, so dass es seine Höhe ändert die Größe stattdessen eine (scheinbar willkürliche) Höhe der Wahl und das Hinzufügen von Bildlaufleisten? Screenshot:
Die QListView
der sollte horizontal so viel Platz füllen, wie sie können (so viele Schaffung von „Spalten“, wenn man so will.) Dann werden sie wickeln und machen so viele Zeilen wie nötig, alle die Elemente passen. Diese Berechnungen sollten eingestellt werden, wie die Fenstergröße verändert wird. Das ist alles gut funktioniert.
Was ich jedoch wollen geschehen ist, dass anstelle der Höhe gleich bleibt, sollte der QListView
wachsen oder vertikal schrumpfen und müssen nie Bildlaufleisten. Das Scrollen, falls erforderlich, wird auf dem QWidget
Eltern behandelt werden, dass Hosts alle Etiketten und Listen. Es scheint, wie einmal die Höhe des QListWidget
hergestellt (nicht sicher, wo die Standard herkommt), es ändert sich nie. Es ist zu groß in einigen Fällen (siehe zweite „Test“ Liste oben) und zu klein, in anderen (siehe ersten „leeren Karten“ Liste oben.)
Das Layout oben ist nicht verwunderlich: zwei QLabel
ist und zwei QListWidget
die in einem QVBoxLayout.
Hier sind die Eigenschaften I auf der QListWidget
des gesetzt haben:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(ich schon versucht, die horizontale und vertikale Bildlauf Politik einstellen, aber das stellt sich nur die Bildlaufleisten aus, um den Inhalt Clipping. Nicht das, was ich will.)
Lösung
Vielleicht könnten Sie dies ohne QListWidget zu verwenden. Die Qt-Beispiele enthalten eine neue Layout-Klasse, QFlowLayout, die nützlich sein könnten. Mit der folgenden Art von Widget-Hierarchie Sie mehrere Gruppen mit Etiketten bekommen konnte, und sie alle würden innerhalb einer QScrollArea sein.
QScrollBox
QVBoxLayout
QLabel "Blank maps"
QWidget
QFlowLayout
your own widgets showing map images and labels
QLabel "Text"
QWidget
QFlowLayout
your own widgets
Das Problem ist, dass diese Art der Lösung viel mehr Widgets als QListWidget basierte Lösung schaffen würde. Also, wenn Sie Hunderte von Artikeln in Ihrer Liste haben, könnte dies nicht die beste Lösung sein.
Andere Tipps
Es ist eine geschützte Mitgliedsfunktion contentsSize()
in QListView
genannt. Es wird verwendet, um den erforderlichen minimum()
, maximum()
und pageStep()
für die Bildlaufleisten zu berechnen (wie erwähnt hier ).
Können Sie Unterklasse die QListView
Klasse und nutzen diese Informationen? Ich schlage vor, Sie die Größe Ihres Widgets in der gleichen Funktion neu zu berechnen, wenn Sie Inhalte hinzufügen. Während etwas Eleganz fehlt, scheint dies eine ziemlich zuverlässige Lösung.