如果我不使用连接,我可以正常退出。
在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.
一个想法?
答案 0 :(得分:1)
要使用QSqlDatabase正确退出,最好需要:
删除QSqlDatabase对象的所有实例(因为在复制它们时,它们将保持连接打开)。
作为第二个条件,您需要使用QSqlDatabe :: removeDatabase()调用。 (如果数据库偶尔仍然在使用,这个调用将发出qDebug消息 - 某个QSqlDatabase对象留在某处 - 它将有助于识别问题。)
答案 1 :(得分:0)
如果您关闭并删除了MainWindow
,程序崩溃了,那么程序的其他部分必须尝试使用MainWindow
指针,即使它已被销毁。
我认为问题在于代码行Pdv::app->quit();
请尝试使用QApplication::quit();
或查看Pdv::app->quit();
中的代码。