qdialog geöffnet lassen

Alles rund um die Programmierung mit Qt
Antworten
chemstar
Beiträge: 13
Registriert: 25. April 2006 11:04

qdialog geöffnet lassen

Beitrag von chemstar »

hallo leute,

habe ein kleineres problem. ich habe ein dialog mit feldern die unbedingt vollständig sein müssen.

ich führe den dialog mit if(dlg.exec() == QDialog::Accepted) aus. in diesem block findet eine überprüfung ger gültigkeit der einträge. nun wie kann ich ein dialog hierbei geöffnet lassen falls die einträge unvollständig sind?

danke!
bigmil
Beiträge: 23
Registriert: 18. Mai 2005 11:06

Beitrag von bigmil »

Hi chemstar,

eine Möglichkeit wäre, wenn du dies nicht in der Klasse machst, in der du dein Dialog aufrufst, sondern direkt in deiner Dialog Klasse.

Dafür musst du zuerst das clicked() Signal des OK-Buttons mit einer SLOT Funktion abfangen. Nach deiner Überprüfung in dieser SLOT-Funktion kannst du dann mit accept() bestätigen und dein Dialog beenden.

Mit Qt 4.1.3:

In deiner Dialog Header Datei:

Code: Alles auswählen

private slots:
void on_okDlg_clicked();   // okDlg ist der Objektname des OK-Pushbuttons
In deiner Dialog CPP Datei:

Code: Alles auswählen

void MyDlg::on_okDlg_clicked()
{
...  // hier überprüfe deine Eingaben

if( Eingabe == OK ) 
     accept();                     // Falls Eingabe ok, Dialog mit accept verlassen

}
Falls Eingaben nicht ok sind, wird demnach accept() nicht aufgerufen und es gescheiht nichts -> dein Dialog bleibt weiterhin offen.

Hoffe dieser Ansatz hilft ein wenig, ansonsten wieder melden.

Gruess
bigmil
Bagstone
Beiträge: 31
Registriert: 20. September 2007 10:55

Beitrag von Bagstone »

Habe das grade probiert, aber das accepted() Signal wird trotzdem an den Dialog gereicht und der schließt trotzdem. Ich kriege zwar die Fehlermeldung die ich haben will, also er geht in die Funktion rein und führt kein accept() aus, aber trotzdem schließt sich derDialog.
Bagstone
Beiträge: 31
Registriert: 20. September 2007 10:55

Beitrag von Bagstone »

Falls den Thread jemand anderes rauskramt:

done(int r) reimplentieren ist die Lösung.

Quelle:
http://www.qtcentre.org/forum/f-qt-prog ... -8048.html
(ich hoffe es verstößt gegen keine Forenregeln Links zu anderen Foren zu posten. ;-))
Antworten