zoukankan      html  css  js  c++  java
  • Qt 异常处理 QT_TRY和QT_CATCH

    1、看看Qt源码中如何定义QT_TRY和QT_CATCH的: 

     1 inline void qt_noop(void) {}
     2  
     3 /* These wrap try/catch so we can switch off exceptions later.
     4    Beware - do not use more than one QT_CATCH per QT_TRY, and do not use
     5    the exception instance in the catch block.
     6    If you can't live with those constraints, don't use these macros.
     7    Use the QT_NO_EXCEPTIONS macro to protect your code instead.
     8 */
     9  
    10 #ifdef QT_BOOTSTRAPPED
    11 #  define QT_NO_EXCEPTIONS
    12 #endif
    13 #if !defined(QT_NO_EXCEPTIONS) && defined(Q_CC_GNU) && !defined (__EXCEPTIONS) && !defined(Q_MOC_RUN)
    14 #  define QT_NO_EXCEPTIONS
    15 #endif
    16  
    17 #ifdef QT_NO_EXCEPTIONS
    18 #  define QT_TRY if (true)
    19 #  define QT_CATCH(A) else
    20 #  define QT_THROW(A) qt_noop()
    21 #  define QT_RETHROW qt_noop()
    22 #else
    23 #  define QT_TRY try
    24 #  define QT_CATCH(A) catch (A)
    25 #  define QT_THROW(A) throw A
    26 #  define QT_RETHROW throw
    27 #endif

    2、我们来使用下QT的异常处理

    1 // 在.pro 中增加如下配置 ==》 Qt默认是不开启异常的
    2 CONFIG += exception
     1 // main.cpp
     2  
     3 enum Except{ EXCEP_ZERO,EXCEP_ONE};
     4  
     5  void func(int a){
     6      if(a ==0) throw (EXCEP_ZERO); // 抛出异常
     7  }
     8  
     9 int main(int argc, char *argv[])
    10 {
    11     QApplication a(argc, argv);
    12  
    13     QT_TRY {
    14         func(1);
    15     } QT_CATCH(Except ex) {
    16         if(ex == EXCEP_ZERO) QT_RETHROW;
    17     }
    18  
    19  
    20  
    21     Widget w;
    22     w.show();
    23     return a.exec();
    24 }
    
    
  • 相关阅读:
    else 的特殊用法和三目运算
    pycharm快捷键
    5、【排序算法】选择排序
    4、【排序算法】希尔排序
    3、【排序算法】直接插入排序
    1、【常见算法】不使用第三个变量交换两个数的值
    1、【排序算法】冒泡排序
    7、【树形结构】哈夫曼树
    6、【树形结构】红黑树
    5、【树形结构】AVL树
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/15205358.html
Copyright © 2011-2022 走看看