Qt 异常处理:如何防止程序崩溃
可以通过 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 函数来进行其他的处理,比如弹窗提示用户等。
原文地址: https://www.cveoy.top/t/topic/nu2n 著作权归作者所有。请勿转载和采集!