Класс QException
Класс QException предоставляет базовый класс для исключений, которые могут быть переданы через потоки. Подробнее...
| Заголовок: | #include <QException> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 5.0 |
| Наследуется от: |
Открытые функции
| virtual QException * | clone() const |
| virtual void | raise() const |
Подробное описание
Qt Concurrent поддерживает возбуждение и перехват исключений через границы потоков при условии, что исключение наследуется от 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 Concurrent в потоке получателя возбудят QUnhandledException.
При использовании QFuture, переданные исключения будут возбуждаться при вызове следующих функций:
Документация по членам-функциям
[virtual] QException *QException::clone() const
В вашем подклассе QException, переопределите clone() так:
MyException *MyException::clone() const { return new MyException(*this); }
[virtual] void QException::raise() const
В вашем подклассе QException, переопределите raise() так:
void MyException::raise() const { throw *this; }
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qexception.html