如果我使用mysql连接,我无法正确退出我的应用程序

时间:2016-06-07 19:32:40

标签: qt

如果我不使用连接,我可以正常退出。

在Pdv.h文件中

namespace Pdv {
    ...
    extern QSqlDatabase db;
    ...
}

在LoginDialog.cpp文件中

QSqlDatabase Pdv::db;
...
    Pdv::db= QSqlDatabase::addDatabase("QMYSQL3");
    Pdv::db.setHostName(Pdv::DB_URL);
    Pdv::db.setUserName(Pdv::DB_USER);
    Pdv::db.setPassword(Pdv::DB_PASS);
    Pdv::db.setDatabaseName(Pdv::DB_DB);
    if(!Pdv::db.open()) {
    ...
    // Checking user login/password and retrieve many variables
...

在mainwindow.cpp文件中

...
void MainWindow::closeEvent(QCloseEvent *event) {
...
    if(Pdv::db.isOpen()) {
        qDebug() << "Opened 1";
        Pdv::db.close();
        qDebug() << Pdv::db.lastError();
        if(Pdv::db.isOpen())
            qDebug() << "Opened 2";
    }
    Pdv::app->quit(); // or QApplication::quit();
}

我在QTCreator控制台中收到此错误

Opened 1
QSqlError("", "", "")
Le programme s'est terminé subitement.
/home/cosmic/src/build-Pdv-Desktop-Debug/Pdv crashed.

一个想法?

2 个答案:

答案 0 :(得分:1)

要使用QSqlDatabase正确退出,最好需要:

  1. 删除QSqlDatabase对象的所有实例(因为在复制它们时,它们将保持连接打开)。

  2. 作为第二个条件,您需要使用QSqlDatabe :: removeDatabase()调用。 (如果数据库偶尔仍然在使用,这个调用将发出qDebug消息 - 某个QSqlDatabase对象留在某处 - 它将有助于识别问题。)

答案 1 :(得分:0)

如果您关闭并删除了MainWindow,程序崩溃了,那么程序的其他部分必须尝试使用​​MainWindow指针,即使它已被销毁。

我认为问题在于代码行Pdv::app->quit();请尝试使用QApplication::quit();或查看Pdv::app->quit();中的代码。