代码如下:
/*
重构关闭函数
*/
void MainWindow::closeEvent(QCloseEvent *event)
{
if(!QMessageBox::information(this,tr("关闭窗口"),tr("确定要退出程序?"),tr("确定"),tr("取消")))
{
if(QSqlDatabase::database().isOpen())
{
qDebug() << "Database is opening!" << endl;
emit ui->action_close->trigger(); // 发送一个关闭数据库信号
// QSqlDatabase::removeDatabase(QSqlDatabase::database().connectionName());
}
event->accept();
}
else
{
event->ignore();
}
}
问题如题目所述,连接数据库关闭窗口出现无响应,断开数据库关闭窗口正常关闭
已经大概知道了由什么引起的无响应了!
我的做法是: 我在槽函数中各处多放了几个qDebug,然后发现在下面这句代码前的qDebug都能输出,之后就出现了无响应
ui->statusBar->showMessage(tr("已关闭数据库连接!"));
就这么看的话,在关闭事件accept之后,这个ui可能被销毁了,所以再使用ui里的东西会造成无响应。
但是还是有一点疑问,就是关闭事件accept明显是发生再触发槽之后的,ui怎么就被销毁了?是不同线程的操作吗?
// 摘自在closeEvent()函数中
if(QSqlDatabase::database().isOpen())
{
qDebug() << "Database is opening!" << endl;
emit ui->action_close->trigger(); // 发送一个关闭数据库信号
}
event->accept();