Frage

Ich arbeite einen kleinen qt-App (mit PyQt4) und ich habe mit einer Idee kommen, aber ich bin nicht sicher, wie es zu implementieren. Ich habe einen QTableView, dass einige Daten darstellt, und ich möchte eine andere Spalte zum QTableView hinzuzufügen, die ein Checkbox-Steuerelement enthält, das zu einem gewissen Stück des Modells verdrahtet werden. Zum Beispiel, so etwas wie folgt aus:

alt text

Beachten Sie die Spalte Löschen eine Checkbox-Widget für jede Zeile hat (obwohl dies eine Web-App ist, nicht ein Desktop-Qt-Anwendung, die Haupt die gleiche ist). Bonuspunkte, wenn ich mehrere Zeilen, die rechte Maustaste auswählen, und wählen Sie „Aktivieren / Deaktivieren ausgewählt“.

Wenn irgendetwas davon unklar ist, fällt hier einen Kommentar und ich werde klären.

War es hilfreich?

Lösung

Ihr eigenes Tischmodell Implementierung ist mehr Arbeit als QStandardItemModel mit (als @Andy empfiehlt), aber es gibt Ihnen eine feine Kontrolle darüber, was Sie tun möchten, also werde ich versuchen, Ihnen eine Zusammenfassung dessen, was zu tun . Ich nehme an, Sie wissen alles über Qt-Dokumentation und Auswahlmodelle . Die kurze Version ist:

  • Stellen Sie die Auswahlmodus auf dem Tisch Ansicht: view.setSelectionMode( QAbstractItemView.ContiguousSelection). Auf diese Weise können Sie zusammenhängende Zellen markieren. Sie können beliebige Zellen als auch hervorzuheben: s. QAbstractView.SelectionMode
  • Um festzustellen, welche Zellen im Anschluss an eine Aktion tatsächlich ausgewählt fragen die Tabellenansicht für die Auswahlmodell (Beachten Sie die 'l' ): view.selectionModel().selectedIndexes(). Sie können mit einer for Schleife durch diese durchlaufen.

Damit die rechte Maustaste:

  • Ignoriere Ihre Ansicht des contextMenuEvent.
  • Erstellen Sie eine QMenu und schließen Sie es an, was auch immer Slots, die Sie benötigen.

Für eine tiefer gehende Verständnis lesen Sie die Qt Leitfaden für Modell / Blick , wenn Sie nicht bereits haben. Und schauen Sie auf jeden Fall auf die Qt Artikel Ansicht Beispiele . Viele von denen, sind beschreiben in PyQt in viel weniger Code (einschließlich der zwei @Jesse erwähnt) und die Baummodell Beispiele tragen über Tabellen, aber mit viel weniger Arbeit umgesetzt (Sie brauchen viel weniger zu implementieren, wie oben beschrieben).

Andere Tipps

Sie können auch einen Blick auf die QStandardItemModel haben, mit dem Sie eine Schnittstelle gibt mit Gegenständen durch einen „überprüfbar“ Zustand interact!

Sie können auch von QAbstractItemModel erben und verwenden Sie die Rolle Qt :: CheckStateRole ...

In Qt / C ++ können Sie einen Delegaten für benutzerdefinierte Elemente in einer Spalte erstellen. Ich würde annehmen, dass Sie etwas sehr ähnliches in PyQt tun können. Siehe folgende Beispiele:

Stern Delegate Beispiel
Spin Box Delegate Beispiel

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