Qt Delegate’s und QDialog

Dieser Artikel beschreibt ein Problem beim Aufruf eines QDialog’s durch den Delegate Mechanismus von Qt 4.
Beim Schliessen eines QDialog’s durch einen Accept oder Reject Button wird ab
qdialog.cpp:577f.

hide();
setResult(r);

ausgeführt. Das Problem ist hier die Reihenfolge – denn
QItemDelegate::eventFilter
prozessiert das hideEvent() und leitet via commitData()
auf qabstractview.cpp:2765

delegate->setModelData()

über, der in einem Nachlauf des eigenen Codes den Result-Wert des Dialogs kennen muß, um Werte des Dialogs entweder zu übernehmen oder zu verwerfen.

Ein schneller und valider Workaround ist das Schliessen des Dialogs abzufangen und setResult() als erstes zu setzen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.