Programm beenden in main

Alles rund um die Programmierung mit Qt
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Programm beenden in main

Beitrag 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
Emperor_L0ser
Beiträge: 51
Registriert: 28. Juli 2005 12:26
Kontaktdaten:

Beitrag von Emperor_L0ser »

sry, fehler im browser, doppelpost
Zuletzt geändert von Emperor_L0ser am 21. Januar 2006 15:30, insgesamt 1-mal geändert.
Emperor_L0ser
Beiträge: 51
Registriert: 28. Juli 2005 12:26
Kontaktdaten:

Beitrag 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
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

dann versuche es mal mit XXX.exit().
XXX= QCore Objekt
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Code: Alles auswählen

app.exit( 0 );
Funktioniert auch nicht.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Na denn schicke mal etwas Code und welche Qt Version du nutzt.
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Also auf den 1. Blick sehe ich was, was Qt stöhren könnte.
qInstallMsgHandler( debugMessageOutput ); bevor das Qt Objekt existiert
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Das ist egal, hat immer funktioniert und hat auch nichts mit dem Beenden zu tun (habs extra fix probiert).
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

haste das mal mit return -1 statt .quit() versucht?
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Ja mit return muss es ja gehen. Aber ich will ja Qt eigene Funktionen nurten.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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
Antworten