日志相关代码
//qml
console.log();//输出调试信息
console.info();//输出信息级别的日志
console.warn();//输出警告信息
console.error();//输出警告信息
console.debug();//输出调试信息
在main.cpp里面加如下:
//c++
#include <QDebug>
QDebug()<<"这是调试信息";
qInfo()<<"这是一般信息";
qWarning()<<"这是警告信息";
qCritical()<<"这是严重错误信息";
qFatal()<<"这致命错误信息";//会导致程序终止
加资源文件和代码文件
在CMakeLists.txt里面,加资源文件(SOURCE)和代码文件(RESOURCE)找到qt-add-qml-module里面的QML_FILES加
格式:SOURCE或者RESOURCE 资源文件路径用/,如果用\会被识别为转义字符
直接干崩溃了,好吧直接学一步步调试
找到了,不需要调试了,把下面这个qFatal()注释掉就行
生成日志
无人监管的情况下将日志存储至文件----方便开发人员进行离线分析->需要自行编写对应的代码实现。我照着写的,运行不了,又改了一些
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QTextStream>
#include <QGuiApplication>
void customMessageHandler(QtMsgType type,const QMessageLogContext &context,const QString &msg)
{
//打开日志文件
QFile file("log.txt");
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream out(&file);
//获取当前时间作为日志时间戳
QString dateTime=QDateTime::currentDateTime().toString("yyyy-mm-dd-hh:mm:ss");
QString txtMessage;
//根据不同的消息类型,设置不同的前缀
switch (type) {
case QtDebugMsg:
txtMessage=QString("%1 - Debug: %2").arg(dateTime, msg);
break;
case QtInfoMsg:
txtMessage=QString("%1 - Info: %2").arg(dateTime, msg);
break;
case QtWarningMsg:
txtMessage=QString("%1 - Warning: %2").arg(dateTime, msg);
break;
case QtCriticalMsg:
txtMessage=QString("%1 - Critical: %2").arg(dateTime, msg);
break;
case QtFatalMsg:
txtMessage=QString("%1 - Fatal: %2").arg(dateTime, msg);
abort();//终止程序
}
out << txtMessage << "\n";
//out<<txtMessage<<std::endl;
//清空和关闭文件(如果需要的话)
file.flush();
file.close();
//同时输出到终端
fprintf(stdout,"%s\n",txtMessage.toLocal8Bit().constData());
fflush(stdout);
}
int main()
//int main(int argc,char *argv[])写这个总报错,我明明写的main,偏说我写qmain
{
qInstallMessageHandler(customMessageHandler);
qDebug()<<"这是调试信息";
qInfo()<<"这是一般的信息";
qWarning()<<"这是警告信息";
qCritical()<<"这是严重错误信息";
QGuiApplication app(int argc,char *argv);
return 0;
}
得到这样的结果,还好,至少可以执行成功了
解释一下:customMessageHandler是自定义的日志输出函数