[gelöst] Hintergrundprogramm macht Probleme beim Abmelden

Alles rund um die Programmierung mit Qt
Antworten
dani
Beiträge: 28
Registriert: 11. August 2005 22:22

[gelöst] Hintergrundprogramm macht Probleme beim Abmelden

Beitrag von dani »

Hallo,

ich habe einen Client geschrieben, der im Hintergrund läuft und nur bei bestimmten Ereignissen irgendwelche Fenster öffnet.

Jetzt habe ich allerdings das Problem, dass das Programm beim Herunterfahren oder beim Abmelden gewaltsam beendet werden muss. Da kommt dann dieser hässliche Beenden-Dialog.

Was muss ich tun, damit sich das Programm ganz normal beenden lässt?

Hier hab ich noch ein minimales Code-Beispiel, bei dem der Fehler auftritt: (Windows XP, Qt 4.0.1)

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	//Hinweis: das QuitOnLastWindowClosed dürfte nicht für das Problem verantwortlich sein
	app.setQuitOnLastWindowClosed(false);
	QPushButton widget("Bla");
	widget.hide();
	return app.exec();
}
Ich ahne schon, dass die Lösung für das Problem sehr einfach ist, aber ich finde einfach keine Lösung. :oops:
Zuletzt geändert von dani am 31. Oktober 2005 15:20, insgesamt 1-mal geändert.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

ich glaube da muss denn etwas Windows API code rein, das das Programm benachrichtig, das jezt die Kiste runtergefahren wird.
dani
Beiträge: 28
Registriert: 11. August 2005 22:22

Beitrag von dani »

Und wie muss ich das machen?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

In der Windows API stecke ich auch nicht gut drin. Aber du kannst ja mal auf den MSDN Seiten suchen.
dani
Beiträge: 28
Registriert: 11. August 2005 22:22

Beitrag von dani »

Ich finde einfach nichts passendes. Es kann doch nicht sein, dass ich ein so einfaches Programm nicht beenden lässt...
dani
Beiträge: 28
Registriert: 11. August 2005 22:22

Beitrag von dani »

Ich bin jetzt zu einer Lösung gekommen.

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

#include <windows.h>

class MyApp : public QApplication
{
	public:
	MyApp(int &argc, char ** argv)
		: QApplication(argc, argv) { };
	
	virtual bool winEventFilter(MSG* msg, long* result) {
		if(msg->message == WM_QUERYENDSESSION) {
			*result = 1;
			quit();
			return true;
		}
		return false;
	};
};

int main(int argc, char *argv[])
{
	MyApp app(argc, argv);
	app.setQuitOnLastWindowClosed(false);
	QPushButton widget("Bla");
	widget.hide();
	return app.exec();
}
Wegen dem Code innerhalb der Klasse: Ja, eigentlich macht man sowas nicht, ich weiß. ;) Aber bei den paar Zeilen...

Hoffenltich komm ich jetzt mal wieder ne Weile ohne Winapi aus. :twisted:
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

und Teileweise mit dem Linken aufpassen. Und das nicht alle win32 API Aufrufe überall verfügbar sind.
Antworten