qt中的全局try and catch块
Posted
技术标签:
【中文标题】qt中的全局try and catch块【英文标题】:global try and catch block in qt 【发布时间】:2016-12-29 04:45:19 【问题描述】:我使用的是 Qt 4.8。有没有办法为整个项目设置一个全局的 try 和 catch 块。例如,如果我的应用程序有两个 .cpp 文件。是否有可能在两个 .cpp 文件中捕获异常?
【问题讨论】:
【参考方案1】:首先,请注意 Qt 不能很好地处理异常。它是在 C++ 中异常是相当晦涩的特性时设计的,因此由于一大堆与实现相关的原因,通常不认为使用异常是一种好的做法。
另外请注意,从 Qt 5.7 开始,异常安全功能并不完整,正如官方 doc 目前所说:
初步警告:异常安全功能不完整!常见情况应该可以工作,但类可能仍会泄漏甚至崩溃。
如果您在类中使用信号槽连接,最好在槽内处理可能抛出异常的异常。从 Qt 5.7 开始,不这样做是 considered 未定义的行为。
如果您只是想对任何偶尔未捕获的异常进行一些清理和/或错误记录,您可以按照前面的答案将整个 main()
内容包装到 try/catch 块中,或者您可以将 wrap the Qt's main event loop 放入这样的块:
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
【讨论】:
【参考方案2】:您可以将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()
【讨论】:
以上是关于qt中的全局try and catch块的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs:catch块中的回调函数在try-catch中返回未定义的参数
单个 Try Catch 块中的多个 JDBC 语句。是好习惯吗?
react-native 无法处理 try catch 块中的错误