在 Qt 框架中提供了以下 几个函数用于不同级别的信息输出:
- qWarning():用于输出警告信息,当程序遇到一些异常但不一定致命的错误时,可以使用qWarning()来通知用户或开发者
- qDebug():用于输出调试信息,如变量的值、函数的返回值。 qInfo():用于输出提示信息,如程序启动信息或操作成功信息。
- qCritical():用于输出比qWarning()更严重的错误信息,但仍然不会导致程序立即终止。
- qFatal():是一个用于报告致命错误的函数。当在 Qt 应用程序中发生无法恢复的错误时,通常会使用 qFatal() 来记录错误信息并终止程序。这个函数将错误信息发送到标准错误输出(stderr),并调用 abort() 来终止程序。它不会与流操作符(如 <<)一起使用,因为它不接受这样的参数。
关闭 qDebug 日志打印,需要在 .pro 文件中添加编译选项:
DEFINES += QT_NO_DEBUG_OUTPUT
示例代码:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug() << "test qDebug" ;
qWarning() << "test qWarning" ;
qCritical() << "test qCritical" ;
return a.exec();
}
日志打印如下:
[root@100ask:/opt/test/bin]# ./test
test qWarning
test qCritical
将 qDebug、qWarning、qCritical、qFatal 日志信息导入到文件中。
示例代码:
#include "widget.h"
#include <QApplication>
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QDateTime>
// 自定义的消息处理器
void customMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 设置文件路径和文件名
QString logFilePath = "application.log";
QFile file(logFilePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Append))
return;
QTextStream out(&file);
QString text;
switch (type) {
case QtDebugMsg:
text = QString("Debug: %1").arg(msg);
break;
case QtWarningMsg:
text = QString("Warning: %1").arg(msg);
break;
case QtCriticalMsg:
text = QString("Critical: %1").arg(msg);
break;
case QtFatalMsg:
text = QString("Fatal: %1").arg(msg);
// 可以在这里添加代码来处理致命错误,比如退出应用程序
abort();
}
out << QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz ")
<< text << endl;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 安装自定义的消息处理器
qInstallMessageHandler(customMessageHandler);
qDebug() << "test qDebug" ;
qWarning() << "test qWarning" ;
qCritical() << "test qCritical" ;
qFatal("test qFatal");
return a.exec();
}
application.log 中的日志如下所示:
[root@100ask:/opt/test/bin]# ls
application.log test
[root@100ask:/opt/test/bin]# cat application.log
1970-01-01 01:57:48.291 Debug: test qDebug
1970-01-01 01:57:48.294 Warning: test qWarning
1970-01-01 01:57:48.295 Critical: test qCritical