[QT] Beenden der Anwendung erzwingen



  • ClassSchedule::ClassSchedule(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::ClassSchedule)
    {
        ui->setupUi(this);
    
        // Datenbank
        QString path = "classschedule.db";
        if (QApplication::arguments().size() > 1)
        {
            path = QApplication::arguments().at(1);
        }
        if(!QFile::exists(path))
        {
            //while((path = QFileDialog::getOpenFileName(this, tr("Datenbank öffnen"), QDir::homePath(), "classschedule.db")) == QString::null);
            if((path = QFileDialog::getOpenFileName(this, tr("Datenbank öffnen"), QDir::homePath(), "classschedule.db")) == QString::null)
                QApplication::exit();
        }
    
        try
        {
            m_database = QSqlDatabase::addDatabase("QSQLITE", "fhsm-cs");
            m_database.setDatabaseName(path);
            m_database.open();
        }
        catch(...)
        {
            m_database.close();
            QMessageBox::critical(this, tr("Fehler"), tr("Datenbank konnte nicht geöffnet werden"));
            QApplication::exit();
        }
    }
    

    Mahlzeit ... wie das Topic schon verrät, suche ich einen Weg, mein Programm zu beenden. QApplication::exit() mag irgendwie nicht. Ein ungültiger Pfad führt auch nicht zu einer Exception ... der Sqlite-Treiber legt dann einfach eine Datenbank an. Hat jemand ne Idee?



  • Wenn das Hauptfenster schliesst, sollte sich auch der Prozess beenden.



  • Und wo bitte steht dokumentiert, dass deine Funktionen in dem try-Block Exceptions werfen können?



  • Qt selbst wirft keine(*) exceptions. Check mal die API für m_database.open(); das gibt nen Returnwertden man Testen kann obs geklappt hat ... und wenn nicht: zB: QTimer::singleShort(5, this, SLOT(close())); oder besser nen Slot der den User über das nichtvorhandensein der DB aufklärt und dann close() aufruft.

    (*) die mir in ca 16 Monaten Qt Untegekommen wären


Anmelden zum Antworten