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:

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.)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top