2016-12-02 67 views
1

我做QException的一個子類,如下所示:Qt的QException子類拋出,但QUnhandledException抓

#include <QtConcurrent> 
#include <QException> 

class ProcessingException : public QException 
{ 
public: 
    ProcessingException(QString const& message) : 
     message(message) 
    {} 

    virtual ~ProcessingException() 
    { 

    } 

    void raise() const { throw *this; } 
    ProcessingException *clone() const { return new ProcessingException(*this); } 

    QString getMessage() const 
    { 
     return message; 
    } 
private: 
    QString message; 
}; 

在隨即通過QtConcurrent運行我拋出這個子類的實例與throw new ProcessingException("test");的方法::運行。然後,如果我正確理解文檔,那麼當我用.waitForFinished()收集未來的結果時,Qt應該重新拋出QException子類。但是,使用這種方法,我只能捕捉到一個QUnhandledException:

try 
{ 
    watcher->waitForFinished(); 
} 
catch(const ProcessingException &e) 
{ 
    qCritical() << "Caught:" << e.getMessage(); 
} 
catch(const QUnhandledException &e) 
{ 
    qCritical() << "Uncaught qexception!"; 
} 

我錯過了什麼?

回答

3

你扔一個指針,但追趕的參考....

只需使用throw ProcessingException("test");。 您可以通過const引用來捕獲它,並且在捕獲它之後不必清除它(請撥打delete)。

相關:throw new std::exception vs throw std::exception

相關問題