Problem mit QMessageBox und "hidden" Dialog

Alles rund um die Programmierung mit Qt
Antworten
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

Problem mit QMessageBox und "hidden" Dialog

Beitrag 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
Zuletzt geändert von KartoffelKiffer am 19. Juni 2009 14:11, insgesamt 1-mal geändert.
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

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

Re: Problem mit QMessageBox und "hidden" Dialog

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
KartoffelKiffer
Beiträge: 101
Registriert: 27. Februar 2008 15:59

Beitrag von KartoffelKiffer »

Stimmt, es läuft.

Vielen Dank! (war mir bisher nicht bekannt)
Antworten