可以通过 QMessageHandler 类来捕获 Qt 的异常信息并进行处理,避免程序退出。

示例代码:

#include <QApplication>
#include <QDebug>
#include <QMessageHandler>

void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
    Q_UNUSED(context);
    switch (type) {
    case QtDebugMsg:
        fprintf(stderr, "Debug: %s\n", msg.toLocal8Bit().constData());
        break;
    case QtInfoMsg:
        fprintf(stderr, "Info: %s\n", msg.toLocal8Bit().constData());
        break;
    case QtWarningMsg:
        fprintf(stderr, "Warning: %s\n", msg.toLocal8Bit().constData());
        break;
    case QtCriticalMsg:
        fprintf(stderr, "Critical: %s\n", msg.toLocal8Bit().constData());
        break;
    case QtFatalMsg:
        fprintf(stderr, "Fatal: %s\n", msg.toLocal8Bit().constData());
        abort();
    }
}

int main(int argc, char *argv[])
{
    qInstallMessageHandler(myMessageOutput); // 设置消息处理函数

    QApplication app(argc, argv);
    // your code here

    return app.exec();
}

在上面的代码中,我们定义了一个自定义的消息处理函数 myMessageOutput,并通过 qInstallMessageHandler 函数来将其设置为 Qt 的消息处理函数。在这个函数中,我们可以根据不同的消息类型来进行不同的处理,比如输出到控制台、写入日志文件等。当出现 QtFatalMsg 类型的消息时,程序会中止,但是可以通过重载 abort 函数来进行其他的处理,比如弹窗提示用户等。

Qt 异常处理:如何防止程序崩溃

原文地址: https://www.cveoy.top/t/topic/nu2n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录