QException 类

QException 类为可以在线程之间传递的异常提供了一个基类。更多信息...

头文件 #include <QException>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承自

QUnhandledException

公共函数

虚 QException *clone() const
虚 voidraise() const

详细描述

Qt 并发支持在线程边界抛出和捕获异常,前提是异常继承自 QException 并实现了两个辅助函数

class MyException : public QException
{
public:
    void raise() const override { throw *this; }
    MyException *clone() const override { return new MyException(*this); }
};

QException 子类必须按值抛出和按引用捕获

try  {
    QtConcurrent::blockingMap(list, throwFunction); // throwFunction throws MyException
} catch (MyException &e) {
    // handle exception
}

如果您抛出的异常不是 QException 的子类,则在接收器线程中,Qt 并发函数将抛出 Qt 并发QUnhandledException

在使用 QFuture 时,以下函数调用时将抛出传递的异常

成员函数文档

[虚拟] QException *QException::clone() const

在您的 QException 子类中,重实现 clone() 如下

MyException *MyException::clone() const { return new MyException(*this); }

[虚拟] void QException::raise() const

在您的 QException 子类中,重实现 raise() 如下

void MyException::raise() const { throw *this; }

© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。本文件中提供的文档是根据自由软件基金会的《GNU 自由文档许可证版本 1.3》条款许可的。Qt 以及相应的标志是 Finland 和/或全世界的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。