Frage

Ich habe eine QTableView, für die ich die letzte Spalte immer im Bearbeitungsmodus anzeigen möchte. (Es ist ein Qcombobox, bei dem der Benutzer den Wert immer ändern kann.)

Ich glaube, ich habe die Lösung in der gesehen QT -Dokumentation, aber ich kann es nicht mehr finden. Gibt es eine einfache Möglichkeit, dies zu tun?

Ich denke, ich könnte diesen Effekt durch Verwendung von Verwendung archivieren openPersistentEditor() Für jede Zelle, aber ich suche einen besseren Weg. (Wie nur für die gesamte Spalte nur einmal angeben.)

War es hilfreich?

Lösung

Es gibt zwei Möglichkeiten:

Verwendung setIndexWidget, aber Trolltech schreibt:

Diese Funktion sollte nur verwendet werden, um statische Inhalte innerhalb des sichtbaren Bereichs anzuzeigen, der einem Datenelement entspricht. Wenn Sie benutzerdefinierte dynamische Inhalte anzeigen oder ein benutzerdefiniertes Editor -Widget implementieren möchten, subklassen Sie stattdessen QITEMDELEGATE.

(Und es bricht das Modell/View -Muster…)

Oder verwenden ein Delegierter paint Methode. Aber hier müssen Sie alles selbst implementieren wie aktiviert/deaktiviert Elemente selbst.

Andere Tipps

Eine Möglichkeit, das automatische Bearbeitungsverhalten zu erhalten, besteht darin, die SetedIttriggers () -Funktion der Ansicht mit dem Wert qabstractItemView :: AllEdittriggers aufzurufen.

Um den Inhalt einer bestimmten Spalte auf eine bestimmte Weise anzuzeigen, schauen Sie sich QabstractItemView :: setItemDelegateForColumn () an. Auf diese Weise können Sie einen benutzerdefinierten Delegierten nur für die Elemente angeben, die ihn benötigen. Für jedes von ihnen wird jedoch nicht automatisch ein Editor -Widget erstellt (es könnte im Prinzip Tausende von ihnen sein), aber Sie könnten den Delegierten verwenden, um jeden Element so zu rendern, dass es wie ein Editor -Widget aussieht.

Das QabstractItemmodel::Flaggen Die virtuelle Funktion wird aufgerufen, um zu testen, ob ein Element bearbeitet werden kann (siehe Qt :: itepable). Sich ansehen Das Modell bearbeitbar machen in dem Modell-/Ansichtsprogrammierung Dokumentation.

Ich kann keine einfache Möglichkeit sehen, dies zu tun, aber Sie können möglicherweise mit einem Delegierten 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 sich genug bemühen. Wenn Sie einen ordnungsgemäßen Delegierten erhalten, sollten Sie es in der Lage sein, ihn auf eine ganze Ansicht, eine Zelle einer Ansicht oder nur eine Spalte oder Zeile einzustellen.

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