Irgendwie ist mir nicht ganz klar geworden, was Du erreichen willst. Ein Delegate dient doch dazu, genau ein Item (also z.B. eine Zelle in einer Tabelle) zu bearbeiten. Dazu kann eine Combobox oder ein LineEdit verwendet werden.
Ich dachte, dass durch die Delegates alle Bearbeitungsaufgaben erledigt werden sollen, und man nicht nur z.B. eine Zelle bearbeiten kann. Vielleicht habe ich da die Qt-Doku aber falsch verstanden, v.a. da dort auch immer nur von einer Combobox oder einem Lineedit die Rede ist - und nur eine Zelle bearbeitet wird.
Das Delegate wird von QItemDelegate abgeleitet und die Methoden setEditorData() und setModelData() sorgen für die Belegung des Editor-Widgets und schreiben die Daten in das Model. Wozu ein Dialog mit mehreren Eingabe-Elementen für einen Wert?
Ich möchte mehrere Attribute eines XML-Elements in einem Dialogfenster bearbeiten können, zusätzlich soll in dem Dialog noch ein kleiner Hilfetext zum entsprechenden Eintag angezeigt werden. In createEditor() habe ich den Code für das Dialogfenster, setEditorData() und setModelData() funktionieren soweit auch, aber beim klicken auf OK passiert halt nichts, nur wenn ich den Dialog schliesse und irgenwo in den View klicke werden die Werte geändert.
Wenn die Bearbeitung der Einträge über ein Icon in der Werkzeugleiste erfolgen soll, würde ich dafür gar nicht auf Delegates zurückgreifen, sondern folgenden Weg gehen:
- über die Methode currrentIndex() des Models den Index des selektierten Eintrags holen
- die Eingabefelder und Auswahllisten des Dialogs mit den Daten füllen, auf die der Index verweist
- den Dialog mit der exec() Methode anzeigen
- Nach dem Schließen des Dialogs die neuen Werte mit der setData() Methode des Models in das entsprechende Model schreiben
So werde ich es wohl mal versuchen, ist auf jeden Fall ein guter Vorschlag! Über die Toolbar kann ich den Dialog so öffnen, wie geht das denn über einen Doppelklick auf den entsprechenden Eintag?
Gruss,
D.