Problem mit QMessageBox und "hidden" Dialog
Verfasst: 5. November 2008 14:27
Hallo,
ein Problem plagt mich seit kurzem. Und zwar starte ich meine Applikation versteckt. Ich rufe also in der main nicht die Funktion show() vom Dialog auf.
Nun habe ich in meinem Programm einen QProcess, wo ich auf das SIGNAL finished lausche. Es soll dort eine MessageBox angezeigt werden "Programm beendet". Ganz simpel eigentlich.
Allerdings beendet sich das Programm nach Betätigung des "Ok"-Buttons der MessageBox. Beim Debuggen sieht man auch, wie das Programm die eventLoop verlässt und in die main zurückgeht, wo return a.exec() die Applikation beendet.
Was kann das bitteschön sein?
Ich habe ein simples Beispiel angefügt, die ein Programm SelfClose startet. Dieses Programm schließt sich nach 2sek automatisch (siehe hier )
main
QMsgBoxBug
SubClass
Es fallen dabei zwei Sachen auf: Wenn ich zum einen den Dialog anzeigen lasse (show() also aufrufe), kommt die MessageBox und die Applikation bleibt am Leben. Wenn ich zum anderen die MessageBox in dem SLOT Started() aufrufe und im Gegenzug die in Finished(...) auskommentiere, so kommt die MessageBox beim Starten des Unterprogrammes und die Applikation stürzt nicht ab.
Ich bin am Rätseln was das noch sein kann.
Mfg KK
ein Problem plagt mich seit kurzem. Und zwar starte ich meine Applikation versteckt. Ich rufe also in der main nicht die Funktion show() vom Dialog auf.
Nun habe ich in meinem Programm einen QProcess, wo ich auf das SIGNAL finished lausche. Es soll dort eine MessageBox angezeigt werden "Programm beendet". Ganz simpel eigentlich.
Allerdings beendet sich das Programm nach Betätigung des "Ok"-Buttons der MessageBox. Beim Debuggen sieht man auch, wie das Programm die eventLoop verlässt und in die main zurückgeht, wo return a.exec() die Applikation beendet.
Was kann das bitteschön sein?
Ich habe ein simples Beispiel angefügt, die ein Programm SelfClose startet. Dieses Programm schließt sich nach 2sek automatisch (siehe hier )
main
Code: Alles auswählen
QApplication a(argc, argv);
QMsgBoxBug w;
//w.show();
return a.exec();
Code: Alles auswählen
#include "qmsgboxbug.h"
QMsgBoxBug::QMsgBoxBug(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
subc = NULL;
subc = new SubClass(this);
}
QMsgBoxBug::~QMsgBoxBug()
{
delete subc;
subc = NULL;
}
Code: Alles auswählen
#include "subclass.h"
SubClass::SubClass(QObject *parent)
: QObject(parent)
{
mParent = NULL;
mParent = parent;
p = NULL;
p = new QProcess();
connect(p, SIGNAL(finished(int, QProcess::ExitStatus)),
this, SLOT(Finished(int, QProcess::ExitStatus)));
connect(p, SIGNAL(started()),
this, SLOT(Started()));
p->start("c:/SelfClose.exe");
}
SubClass::~SubClass()
{
delete p;
p = NULL;
}
void SubClass::Started()
{
//QMessageBox::information(0, "", "");
}
void SubClass::Finished(int ec, QProcess::ExitStatus es)
{
QMessageBox::information(0, "", "");
}
Ich bin am Rätseln was das noch sein kann.
Mfg KK