Qt 全局异常捕获:重载 notify() 函数
在 Qt 中,可以通过重载 QCoreApplication::notify() 函数来捕获全部异常。该函数在 Qt 中所有的事件循环中都会被调用,包括 GUI 事件循环和非 GUI 事件循环。
以下是一个示例:
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <exception>
class Application : public QCoreApplication
{
public:
Application(int &argc, char **argv) : QCoreApplication(argc, argv) {}
protected:
bool notify(QObject *receiver, QEvent *event) override
{
try {
return QCoreApplication::notify(receiver, event);
} catch (const std::exception &e) {
qCritical() << 'Exception caught:' << e.what();
} catch (...) {
qCritical() << 'Unknown exception caught';
}
return false;
}
};
int main(int argc, char **argv)
{
Application app(argc, argv);
// your code here
return app.exec();
}
在上面的代码中,我们重载了 QCoreApplication::notify() 函数,并在其中加入了异常处理逻辑。当任何异常被抛出时,该函数会在捕获异常后打印异常信息并返回 false,以表示事件未被正确处理。这样就可以在 Qt 应用程序的任何地方捕获并处理异常了。
原文地址: https://www.cveoy.top/t/topic/nu7l 著作权归作者所有。请勿转载和采集!