Qt/C++事件循环异常处理

Geo*_*rg 4 qt exception event-loop

我的应用程序很大程度上基于QT和许多第三方库.在几种情况下,这些碰巧会引发一些例外.

在本机Qt应用程序中,这会导致应用程序中止或终止.通常主数据模型仍然完整,因为我将其保留在纯Qt中,没有外部数据.

所以我想,我也只是告诉用户,在这个的这个过程已经发生有错误,他现在应该保存,甚至决定继续在主模型工作恢复.

目前,该程序只是默默地退出,甚至没有讲故事.

Gar*_*ell 5

由于Qt文档中所述这里,Qt是目前没有完全的异常安全的.该页面上的"从异常中恢复"部分描述了在抛出异常时您可以在Qt应用程序中执行的唯一操作 - 清理并退出应用程序.

鉴于您正在使用会抛出异常的第三方库,您需要在外部库和Qt代码之间的边界捕获它们,并在那里处理它们 - 如Caleb的评论中所述.如果错误必须传播到Qt应用程序中,则必须通过返回错误代码(如果可能)或通过发布事件来完成.


Ral*_*zky 5

有时候抓住所有异常真的很难.如果一个例外意外泄漏,以下内容有很大帮助.以下列方式继承QApplication并覆盖该notify()函数

bool MyApplication::notify( 
QObject * receiver, 
QEvent *  event ) 
{
    try 
    {
        return QApplication::notify(receiver, event);
    }
    catch(...)
    {
        assert( !"Oops. Forgot to catch exception?" );

        // may be handle exception here ...
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

然后用您的自定义类替换QApplication您的main()函数.全部eventsslots通过此函数发出,以便可以捕获所有异常并使您的应用程序变得稳定.