2009-10-16 62 views
12

其实,我明白主要优点和使用异常的利弊。我默认使用它们作为错误处理策略。 但现在我开始用Qt库一个Windows CE的项目,我看到Qt的创造者拒绝在类层次结构使用异常。Qt和错误处理策略

所以,如果我用我的/ Qt代码界限异常我需要仔细把它们翻译成和错误代码(或某些对象,或刚咽下)。否则,我可以拒绝在我的代码中使用例外并切换到其他策略。

什么是在我的情况最好的错误处理策略 - 使用异常或使用错误代码,或等...? 你有Qt开发经验,你使用了什么错误处理策略?

回答

0

抛出异常了事件处理程序的不Qt的支持。避免这种情况,并且不应该有任何例外问题。

+0

是否cheez说,这实际上是支持? – 2009-10-16 16:10:51

+0

不,不支持。只是你可以使用它们,风险自负。 – cheez 2009-10-16 20:17:53

7

覆盖QApplication :: notify()并处理那里的异常(不是100%的返回值)。你可以从信号处理程序中“抛出”异常,但不会以这种方式传播给Qt。

bool 
notify(QObject * rec, QEvent * ev) 
{ 
    try 
    { 
    return QApplication::notify(rec,ev); 
    } 
    catch(my::Exception & e) 
    { 
    QMessageBox::warning(0, 
         tr("An error occurred"), 
         e.message()); 
    } 
    catch(...) 
    { 
    QMessageBox::warning(0, 
         tr("An unexpected error occurred"), 
         tr("This is likely a bug.")); 
    } 
    return false; 
+0

所以,这个方法将允许我们从事件处理程序中抛出异常。但是插槽(直接连接和排队连接)呢? – 2009-10-16 16:08:46

+0

您必须测试... – cheez 2009-10-16 19:25:28

+0

这就是我们自Qt 4.0以来一直在做的事情,很好地工作! – Ringding 2009-10-19 14:27:00