2009-02-09 9 views
6

Ich habe eine QTableView, für die ich die letzte Spalte immer im Bearbeitungsmodus anzeigen möchte. (Es ist eine QComboBox, wo der Benutzer in der Lage sein sollte, den Wert immer zu ändern.)Wie kann ich Qt mitteilen, dass in QTableView immer ein Editor angezeigt wird?

Ich denke, ich habe die Lösung in der Qt documentation gesehen, aber ich kann es nicht mehr finden. Gibt es eine einfache Möglichkeit, dies zu tun?

Ich denke, ich könnte diesen Effekt mit openPersistentEditor() für jede Zelle archivieren, aber ich bin auf der Suche nach einem besseren Weg. (Geben Sie beispielsweise nur einmal für die gesamte Spalte an.)

Antwort

4

Es gibt zwei Möglichkeiten:

setIndexWidget verwenden, aber Trolltech schreibt:

Diese Funktion steht nur auf Anzeige statischer Inhalte im sichtbaren Bereich verwendet werden soll, zu einem Element von Daten entspricht. Wenn Sie einen benutzerdefinierten dynamischen Inhalt anzeigen oder ein benutzerdefiniertes Editor-Widget implementieren möchten, verwenden Sie stattdessen die Unterklasse QItemDelegate .

(Und es bricht das Model/View-Muster ...)

Oder a delegate's paint method verwenden. Aber hier müssen Sie alles wie aktivierte/deaktivierte Elemente selbst implementieren.

0

Ich kann keine einfache Möglichkeit sehen, dies zu tun, aber Sie können möglicherweise mit einem Delegaten verwalten. Ich weiß ehrlich gesagt nicht genau, wie es funktionieren würde, aber Sie sollten in der Lage sein, etwas zum Laufen zu bringen, wenn Sie es hart genug versuchen. Wenn Sie einen richtigen Delegaten erhalten, sollten Sie in der Lage sein, ihn auf eine ganze Ansicht, eine Zelle einer Sicht oder nur eine Spalte oder Zeile zu setzen.

3

Eine Möglichkeit, das automatische Bearbeitungsverhalten zu erhalten, besteht darin, die Funktion setEditTriggers() der Ansicht mit dem Wert QAbstractItemView :: AllEditTriggers aufzurufen.

Um den Inhalt einer bestimmten Spalte in einer bestimmten Weise anzuzeigen, werfen Sie einen Blick auf QAbstractItemView :: setItemDelegateForColumn(). Auf diese Weise können Sie einen benutzerdefinierten Delegaten nur für die Elemente angeben, für die er benötigt wird. Es wird jedoch nicht automatisch ein Editor-Widget für jedes von ihnen erstellt (es könnte im Prinzip Tausende von ihnen geben), aber Sie können den Delegaten verwenden, um jedes Element so darzustellen, dass es wie ein Editor-Widget aussieht.

Verwandte Themen