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

Alles rund um die Programmierung mit Qt
Antworten
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

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

Beitrag 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.
Dateianhänge
xmlModel.cpp
(10.98 KiB) 159-mal heruntergeladen
xmlModel.h
(2.57 KiB) 151-mal heruntergeladen
Zuletzt geändert von C_R am 4. Mai 2007 09:25, insgesamt 2-mal geändert.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

Kriegs echt nich hin oO
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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().
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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.
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag von C_R »

:idea: Hab den Fehler gefunden, ich poste gleich nochmal
C_R
Beiträge: 129
Registriert: 25. April 2007 15:12

Beitrag 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.
Antworten