我正在使用Qt 4.8。有没有办法对整个项目进行全局尝试和捕获阻止。例如,如果我的应用程序有两个.cpp文件。是否可以通过两个.cpp文件捕获异常?
答案 0 :(得分:1)
首先,请注意Qt并不适用于例外情况。它是在那些日子里设计的,当时异常是C ++的一个相当模糊的特性,因此对于一大堆与实现相关的原因,异常的使用通常不被认为是一种好的做法。
另外要注意的是,从Qt 5.7开始,异常安全功能并不完整,正如官方doc目前所说:
初步警告:异常安全功能不完整!常见情况应该有效,但是类仍可能泄漏甚至崩溃。
如果在类中使用信号槽连接,最好处理可能抛出它们的插槽内的异常。从Qt 5.7开始,不这样做是considered未定义的行为。
如果您只想对任何偶尔未捕获的异常进行一些清理和/或错误记录,您可以将整个main()
内容包装到try / catch块中,如前面的答案所示,或者您可以{{ 3}}进入这样一个块:
QApplication app(argc, argv);
...
try {
app.exec();
}
catch (const std::exception &) {
// clean up here, e.g. save the session
// and close all config files.
return 0; // exit the application
}
答案 1 :(得分:0)
您可以将main()
函数的全部内容括在括号中,如下所示::
int main(int argc, char *argv[])
{
int ret = 0;
try
{
QApplication a(argc, argv);
QWidget w;
w.show();
ret = a.exec();
}
catch(...)
{
/* ... */
}
return ret;
}
另请参阅:std::set_terminate()