Seite 1 von 2

Programm beenden in main

Verfasst: 21. Januar 2006 11:17
von Nassian
Hi,

Ich möchte das Programm in der main Funktion vorzeitig durch QCoreApplication::exit() beenden. Das funktioniert allerdings nicht, das Programm läuft einfach weiter.
Warum?

MfG,
Alex

Verfasst: 21. Januar 2006 15:27
von Emperor_L0ser
sry, fehler im browser, doppelpost

Verfasst: 21. Januar 2006 15:30
von Emperor_L0ser
kannst du etwas code zeigen und genau erklären ob es sich um eine konsolenanwendung oder fenster-anwendung handelt usw., ich kann mir das noch nicht so ganz vorstellen.

nebenbei verwende ich in der Regel QApplication::quit() um z.b nach dem klicken auf einen beenden button das programm zu beenden

Verfasst: 21. Januar 2006 18:19
von Nassian
Hi,
Also im Prinzip sieht es so aus (Natürlich ist im Original noch die Qt Initialisierung):

Code: Alles auswählen

int main()
{
        qCritical() << "Invalid mode!";
        QCoreApplication::exit( -2 );
}
Es ist eine Konsolenanwendung. Die Verwendung von ::quit() bringt auch nichts, ist im Endeffekt eigentlich auch das Gleiche.
Das Problem ist, dass wenn ich das Programm mit einer dieser Methoden beenden möchte, es einfach nicht beendet wird, sondern weiterläuft.

MfG,
Alex

Verfasst: 21. Januar 2006 18:40
von BartSimpson
dann versuche es mal mit XXX.exit().
XXX= QCore Objekt

Verfasst: 22. Januar 2006 10:20
von Nassian

Code: Alles auswählen

app.exit( 0 );
Funktioniert auch nicht.

Verfasst: 22. Januar 2006 11:02
von BartSimpson
Na denn schicke mal etwas Code und welche Qt Version du nutzt.

Verfasst: 22. Januar 2006 12:38
von Nassian

Code: Alles auswählen

int main( int argc, char **argv )
{
	qInstallMsgHandler( debugMessageOutput );
	
	QCoreApplication app( argc, argv );
	app.setOrganizationName( "XXX" );
	app.setOrganizationDomain( "XXX" );
	app.setApplicationName( "XXX" );
	
	Debug::debug_file.setFileName( QString( "%1/%2" ).arg( QCoreApplication::applicationDirPath() ).arg( "debug.txt" ) );
	if( !Debug::debug_file.open( QIODevice::WriteOnly ) ) {
		cerr << "Failed opening debug file!" << endl;
		return 0;
	}
	
	QSettings settings( QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName() );
	if( settings.value( "General/IsConfigured", "false" ).toString() == "false" )
		createSampleConfiguration();
	
	
	// Configure mode, or not
	if( (argc == 4) or (argc == 5) ) {
		if( QString( argv[1] ) == "configure" ) {
			if( QString( argv[2] ) == "set" ) {
				settings.setValue( QString( argv[3] ), QString( argv[4] ) );
				settings.sync();
				QCoreApplication::exit( 0 );
			}
			else if( QString( argv[2] ) == "get" ) {
				cout << settings.value( QString( argv[3] ) ).toString().toAscii().constData() << flush;
				QCoreApplication::exit( 0 );
			}
			else {
				qCritical() << "Invalid modifier!";
				QCoreApplication::exit( -1 );
			}
		}
		else {
			qCritical() << "Invalid mode!";
			QCoreApplication::exit( -2 );
		}
	}
	else {
		// Initialize sub-systems
		ServerConnection::instance();
		Synchronizer::instance();
		Jukebox::instance();
		
		// Connect sub-systems
	}
	
	return app.exec();
}
Da der vorherige Beispielcode nicht reich, hier mal das akutelle, konkrete Stück. Ich verwende Qt 4.1.0 commercial

MfG,
Alex

Verfasst: 22. Januar 2006 12:52
von BartSimpson
Also auf den 1. Blick sehe ich was, was Qt stöhren könnte.
qInstallMsgHandler( debugMessageOutput ); bevor das Qt Objekt existiert

Verfasst: 22. Januar 2006 14:30
von Nassian
Das ist egal, hat immer funktioniert und hat auch nichts mit dem Beenden zu tun (habs extra fix probiert).

Verfasst: 22. Januar 2006 14:39
von BartSimpson
Ich habe gerade noch mal ein Blick in die Doku geworfen. Und so wie ich das versteht, geht das erst, wenn exec aufgerufen worden ist.
du kannste es ja mal mit return -1 oder was auch immer versuchen

Verfasst: 22. Januar 2006 21:06
von Nassian
Was macht das denn für einen Sinn, wenn ich erst zu einem Zeitpunkt das Programm beenden kann, wo es ohnehin schon zuende ist? Wenn ich das Programm aus einer anderen Klasse heraus beenden möchte kann/will ich auch nicht das "normale" exit() verwenden.

Verfasst: 22. Januar 2006 21:25
von BartSimpson
haste das mal mit return -1 statt .quit() versucht?

Verfasst: 23. Januar 2006 14:03
von Nassian
Ja mit return muss es ja gehen. Aber ich will ja Qt eigene Funktionen nurten.

Verfasst: 23. Januar 2006 15:30
von BartSimpson
die wird erst gehen, wenn das QAppliction/Core Objekt läuft. Und das passeier erst nach exec. Steh ja auch in der Doku