首页 新闻 会员 周边

在关闭事件accept之前执行发送关闭数据库信号导致程序无响应,非正常关闭

0
悬赏园豆:20 [已解决问题] 解决于 2020-06-16 23:00

代码如下:

/*
    重构关闭函数
*/
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();
    }
}

问题如题目所述,连接数据库关闭窗口出现无响应,断开数据库关闭窗口正常关闭

问题补充:

错误演示

cxccc的主页 cxccc | 初学一级 | 园豆:162
提问于:2017-09-11 21:50
< >
分享
最佳答案
0

已经大概知道了由什么引起的无响应了!

我的做法是: 我在槽函数中各处多放了几个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();
cxccc | 初学一级 |园豆:162 | 2017-09-12 10:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册