Checkboxes als Liste

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Hallo zusammen,

ich würde gerne so etwas wie eine Liste mit Checkboxes erstellen. Die länge dieser Liste und die QCheckBox Objekte werden erst zur Laufzeit erstellt.
Was mir fehlt ist das passende Widget, welches (falls nötig) auch ne Scrollbar an der Seite anzeigt.
Ich habs mir QScrollArea versucht, bekomms aber nicht hin und QListWidget tuts schon garnicht.

Weiß jemand rat?
Dies ist keine Signatur!
lunar

QListWidget tut das sehr wohl, Du musst nur die Dokumentation lesen :roll:

Wenn Du Items hinzufügst, dann musst Du mit "setFlags()" dafür sorgen, dass das Widget das Item überhaupt als "checkable" erkennt. Welchen Flag Du setzen musst, kannst Du in der Dokumentation nachlesen oder dem folgenden Beispiel entnehmen. Anschließend kannst Du auch mit ".checkState()" oder ".setCheckState()" den Zustand der Checkbox abfragen bzw. verändern.

Die Alternative ist QListView mit einem eigenen Modell. Bei einem einfachen, von QStringListModel abgeleitetem Modell sieht das in etwa (ungetestet) so aus:

Code: Alles auswählen

class CheckableListModel(QStringListModel):
    def __init__(self, parent=None):
        QStringListModel.__init__(self, parent)
        self._checked_rows = set()

    def flags(self, index):
        return QStringListModel.flags(self, index) | Qt.ItemIsUserCheckable

    def data(self, index, role):
        if role == Qt.CheckStateRole:
            return Qt.Checked if index.row() in self._checked_rows else Qt.Unchecked
        return QStringListModel.data(self, index, role)

    def setData(self, index, value, role):
        if role == Qt.CheckStateRole:
            if value.toInt() == Qt.Checked:
                self._checked_rows.add(index.row())
            else:
                self._checked_rows.discard(index.row())
            return True
        return QStringListModel.setData(self, index, value, role)
Dieses Modell kannst Du dann befüllen und einem QListView zuweisen.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Muss ich echt das ModelViewSystem nutzen?
damit hatte ich mich noch überhaupt nicht auseinander gesetzt (ja, ich weiß, nicht gerade professionell).

Trotzdem danke für die schnelle Antwort!
Dies ist keine Signatur!
lunar

Lies halt meinen Beitrag, insbesondere die ersten zwei Absätze. Du musst das Model-View-Framework nicht nutzen. QListWidget funktioniert auch.
Shaldy
User
Beiträge: 123
Registriert: Sonntag 2. März 2008, 22:49

Es ist zu heiß für mein Gehirn...

Danke jedenfalls ;)
Dies ist keine Signatur!
Antworten