qt中的全局尝试和捕获块

时间:2016-12-29 04:45:19

标签: windows qt visual-c++

我正在使用Qt 4.8。有没有办法对整个项目进行全局尝试和捕获阻止。例如,如果我的应用程序有两个.cpp文件。是否可以通过两个.cpp文件捕获异常?

2 个答案:

答案 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()