根据你提供的代码,我注意到了一个错误。在文件写入部分,你创建了一个名为fileWrite
的QFile
对象,但在使用QTextStream
进行输出时,却使用了名为file
的对象来构造。
以下是修改后的代码,已修正这个问题:
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
// 确定保存到文件中的文本编码方式为UTF-8
QTextCodec* codec = QTextCodec::codecForName("UTF-8");
QByteArray localMsg = codec->fromUnicode(msg);
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
QString TypeMsg = "";
switch (type) {
case QtDebugMsg:
TypeMsg = QString("Debug");
break;
case QtInfoMsg:
TypeMsg = QString("Info");
break;
case QtWarningMsg:
TypeMsg = QString("Warning");
break;
case QtCriticalMsg:
TypeMsg = QString("Critical");
break;
case QtFatalMsg:
TypeMsg = QString("Fatal");
break;
}
QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh-mm-ss:");
// 将时间转换为UTF-8编码的字节数组,然后再转回QString
time = codec->toUnicode(time.toUtf8());
QString OutMsg = time + QString("%1 (%2:%3, %4) ").arg(TypeMsg).arg(file).arg(context.line).arg(function) + msg + "\n";
QFile fileWrite("log_cs.txt");
if (fileWrite.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
QTextStream stream(&fileWrite); // 修改这里的构造参数为 &fileWrite
// 设置输出流的编码方式为UTF-8
stream.setCodec(codec);
stream << OutMsg;
fileWrite.close();
}
}
在这个修改后的代码中,我将QTextStream
的构造函数中的参数更正为 &fileWrite
,以确保将消息写入正确的文件对象。现在应该能够将日志消息成功写入到文件中了。
内容由零声教学AI助手提供,问题来源于学员提问