Danke für eure Hilfe
Code: Alles auswählen
if (!foobar)
{
QMessageBox::warning(this,"Fehler","Konnte Pointer nicht Initialisieren");
close();
}
Code: Alles auswählen
if (!foobar)
{
QMessageBox::warning(this,"Fehler","Konnte Pointer nicht Initialisieren");
close();
}
Code: Alles auswählen
if (!foobar)
{
QMessageBox::warning(this,"Fehler","Konnte Pointer nicht initialisieren");
exit(1);
} Code: Alles auswählen
qApp->quit();Code: Alles auswählen
QMetaObject::invokeMethod(this, "close", Qt::QueuedConnection);Code: Alles auswählen
class Klasse {
fkt* sym;
// private Konstruktor
Klasse() {
// allgemeines BLABLA
}
bool initialize() {
sym = DllLoader::getSym("symbol_name");
return sym;
}
public:
static Klasse* get() {
Klasse* k = new Klasse;
if(!k->initialize()) {
delete k;
return 0;
}
return k;
}
};
int main() {
// allgemeines Blabla
Klasse* k = Klasse::get();
if( !k ) {
// messagebox aufklappern
QApplication::exit();
}
// usw.
}Sie ist nicht wirklich sauber, da es die EventLoop für etwas nutzt, was du mit normalen C++-Programmierparadigmen besser lösen kannst, die dann auch immer zuverlässig funktionieren. Bei deiner Lösung musst du nur auf die Idee kommen, das closeEvent() zu implementieren, und event->ignore() aufzurufen, und das close() schließt das Widget nicht und beendet auch nicht das Programm. Viel Spaß beim Fehlersuchenf.o.g. hat geschrieben:und was genau spricht jetzt gegen meine Lösung?
Code: Alles auswählen
Konstructor ()
{
// konstruktor zeug
if (willsDochNicht)
QTimer::singleShot(1,qApp,SLOT(close())); // ruft den Slot 1ms nach start der EventQueue auf - dann ist alles existent und wird gleich wieder beendet ;) da gibts auch ne closeAllSubwindows oder so falls mehrfenster allplikation
}