ich habe hier eine von QDialog abgeleitete Klasse, die lediglich 2 Progressbars, 2 Labels und eine ButtonBox beinhaltet.
Der Dialog ist modal, wird also folgendermaßen aufgerufen:
Code: Alles auswählen
FtpUpdateFileDialog updateDlg(this);
int result = updateDlg.exec();Code: Alles auswählen
connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));Nun aber zum Problem:
Im Kontruktor wird eine Funktion aufgerufen, die ein paar Dinge erledigt (Ftp upload oder download, ...).
Diese Funktion kann relativ schnell fehlschlagen (wenn zB. eine Datei nicht vorhanden ist) und soll dann sofort mit einem dem Fehler entsprechenden Return-Code zurückkehren:
Code: Alles auswählen
FtpUpdateFileDialog::FtpUpdateFileDialog(QWidget *parent) : QDialog(parent, Qt::CustomizeWindowHint), m_ui(new Ui::FtpUpdateFileDialog)
{
// Parameter initialisieren, ...
m_ui->setupUi(this);
connect(m_ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
doSomething();
}
void FtpUpdateFileDialog::doSomething()
{
// Prüfe irgendwas, mache irgendwas
if (bError) // Zuvor ist irgendwo ein Fehler aufgetreten
{
done(iErrorNo); // Dialog beenden und irgendeine Fehlernummer zurückgeben
}
}Mein 2. Versuch war nun, die doSomething()-Funktion erst aufzurufen, wenn der Dialog bereits angezeigt wird (kann ja sein, dass das done() erst zurückkehrt, wenn der Dialog wirklich sichtbar ist).
Also hab ich das showEvent überschrieben und die Funktion von hier aus aufgerufen:
Code: Alles auswählen
void FtpUpdateFileDialog::showEvent(QShowEvent *e)
{
QDialog::showEvent(e);
doSomething(); // Ist natürlich im Konstruktor nun nicht mehr vorhanden
}Die Hauptanwendung ist auch nicht mehr bedienbar, weil sie ja aufs tatsächliche Ende des Dialogs wartet...
Schätze mal, dass kommt daher, weil das showEvent nicht Ordnungsgemäß zurückkehrt, sondern mit done(iError) quasi abgestochen wird?
Die Frage wäre jetzt natürlich wie ich es hinbekomme, dass sich der Dialog im Falle eines Fehlers sofort Ordnungsgemäß wieder schließt und der Hauptanwendung den entsprechenden Fehlercode zurückliefert?
danke, mfg