Seite 1 von 1

Problem mit QMessageBox und "hidden" Dialog

Verfasst: 5. November 2008 14:27
von KartoffelKiffer
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

Code: Alles auswählen

	QApplication a(argc, argv);
	QMsgBoxBug w;
	
	//w.show();
	return a.exec();
QMsgBoxBug

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;
}
SubClass

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, "", "");
}
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

Verfasst: 5. November 2008 14:50
von KartoffelKiffer
Nachtrag: Die Applikation stürzt sogar ab, wenn ich ein SIGNAL aus der SubClass an die Dialog-Klasse schicke, und diese dann die QMessageBox anzeigt.

Re: Problem mit QMessageBox und "hidden" Dialog

Verfasst: 5. November 2008 15:12
von macman
KartoffelKiffer hat geschrieben: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.
quitOnLastWindowClosed, default ist true. Wenn von Anfang an kein Fenster, dann gleich wieder tschüss, würde ich mal vermuten.

Verfasst: 5. November 2008 15:23
von KartoffelKiffer
Stimmt, es läuft.

Vielen Dank! (war mir bisher nicht bekannt)