Qt主程序退出事件检测

问题背景:

需要在主程序退出时做调用库资源的反初始化操作,该库只在整个应用程序中初始化和反初始化一次。在界面的析构函数中进行释放不满足要求,eg:管理界面注销跳转到登陆界面,库快速的反初始化->初始化,报资源busy错误。

解决思路:

在主程序退出时,做整个库资源的反初始化操作。

方法一:

int nRtn = a.exec();//此处官方推荐使用aboutToQuit()
if(0 == nRtn)
{
    qDebug() << "程序退出" << nRtn;
    ***Uninitialize();
}

查看exec()函数的帮助文档,官方不推荐使用该方案。因为并不是程序每次退出时都安全的去检测exec()的返回值。

We recommend that you connect clean-up code to the aboutToQuit() signal, instead of
 putting it in your application's main() function. This is because, on some platforms
 the QApplication::exec() call may not return. 

方法二:

官方文档推荐使用aboutToQuit()函数进行检测

//QApplication a(argc, argv);
QObject::connect(&a, &QApplication::aboutToQuit, [&]()
    {
        qDebug() << "程序退出" ;
        ***Uninitialize();
    });

注:在main中在connect()函数使用lambda表达式创建信号和槽报错,见下方代码。

//QApplication a(argc, argv);
QObject::connect(&a, SIGNAL(aboutToQuit()), [&]()
    {
        qDebug() << "程序退出" ;
        ***Uninitialize();
    });

通过SIGNAL方式会报no matching function for call to 'connect'...错误。该种方式需严格按照定义形式创建信号槽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值