问题背景:
需要在主程序退出时做调用库资源的反初始化操作,该库只在整个应用程序中初始化和反初始化一次。在界面的析构函数中进行释放不满足要求,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'...错误。该种方式需严格按照定义形式创建信号槽。