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