Seite 1 von 1

[gelöst] Delegate, (xml)Model, QFileDialog iVm QComboBox

Verfasst: 3. Mai 2007 09:13
von C_R
Hallo,

mein Vorhaben ist, wenn ich die ComboBox aufmache, liegt an 2ter Stelle "Browse.." vor. Browse öffnet einen QFileDialog. Der Pfad soll wieder an die ComboBox zurückgeliefert werden. Das ganze findet in einem QTreeView statt. Allerdings funktioniert das nicht. QFileDialog->exec() beschert nen Segmentation Fault. Und show() rauscht dann einfach drüber und der Pfad wird nicht gesetzt. Ich häng euch die .cpp un die .h mal dran, wäre super, wenn man mal nen Blick drüber werfen könnte :oops:

commitAndCloseComboEditor(int nr) ruft den FileDialog auf.

Verfasst: 3. Mai 2007 15:52
von C_R
Kriegs echt nich hin oO

Verfasst: 3. Mai 2007 16:03
von macman
Ein show() zeigt nur den Dialog, führt ihn aber nicht aus. Also entweder fileDialog->exec() oder gleich die statische Variante QFileDialog::getOpenFilenames().

Verfasst: 3. Mai 2007 16:15
von C_R
Wie gesagt, das führt zu einem Segmentfehler. Werde morgen mal versuchen das über Signale zu lösen. Da im Moment ja derzeit der Delegate das Fenster erstellt, was wahrscheinlich nicht sehr schlau ist.

Verfasst: 4. Mai 2007 07:18
von macman
Ich habe nicht gerade viele Erfahrungen mit dem MVC, aber das mit dem Filedialog kann so nicht funktionieren, da er nichts tut. Um mehr zu sagen, bräuchte ich ein kleines Projekt zum testen.

Verfasst: 4. Mai 2007 08:35
von C_R
Naja, nen kleines Projekt wäre recht umständlich. Das Problem ist, dass ich dort, wo der FileDialog aufgerufen wird, nicht einmal eine QMessageBox (der nur einen beliebigen String ausgibt zum Beispiel) aufrufen darf, da sonst ein Segmentation Fault auftritt. Dasselbe passiert beim QFileDialog::exec().. Woran das genau liegt, weiss ich nicht, aber wie gesagt, probiere es einfach auf das Model zu connecten.

Verfasst: 4. Mai 2007 09:05
von C_R
:idea: Hab den Fehler gefunden, ich poste gleich nochmal

Verfasst: 4. Mai 2007 09:16
von C_R
also

Code: Alles auswählen

void CustomXmlDelegate::commitAndCloseComboEditor(int nr)
ist hinfällig. Durch diesen Aufruf, wurde stets 2mal setEditorData etc aufgerufen.

Also entfällt das connect für die ComboBox:

Code: Alles auswählen

connect(edit, SIGNAL(activated(int)), this, SLOT(commitAndCloseComboEditor(int)));
Danach hat man die Möglichkeit, in a) Delegate::setModelData oder in b) Delegate::setEditorData den FileDialog einzubauen. In SLOTS kann man es total vergessen, jedes mal segmentation fault. Beide Methoden agieren aber bisher nicht so, wie gewohnt (sobald "browse.." ausgewählt wird öffnet sich der Dialog), sondern a) reagiert erst bei Verlassen der ComboBox/Index-Slots b) öffnet fast gewohnt, jedoch unter Umständen 2mal und sofort, wenn man auf die ComboBox drückt (keine Möglichkeit, per Hand Daten einzugeben). Aber das soll erstmal nicht stören, da muss man dann eben noch etwas Zeit hineinstecken. Das Problem ist aber (imho) gelöst.

Btw:
XmlModel liest eben eine Xml-File in ein TreeView, wers braucht.