2009-10-16 51 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