#include "mainwindow.h" #include #include #include #include #include #include #include void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg); int main(int argc, char *argv[]) { // 安装消息处理函数 qInstallMessageHandler(outputMessage); QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg) { static QMutex mutex; mutex.lock(); QByteArray localMsg = msg.toLocal8Bit(); QString text; switch (type) { case QtDebugMsg: text = QString("Debug:"); break; case QtWarningMsg: text = QString("Warning:"); break; case QtCriticalMsg: text = QString("Critical:"); break; case QtFatalMsg: text = QString("Fatal:"); break; default: text = QString("Debug:"); break; } // 输出信息格式 const QString context_info = QString("File:(%1)").arg(QString(context.file)); const QString strDataTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); #ifdef DEBUG const QString strMessage = QString("[%1] [%2]\t[%3]\t[%4]").arg(text).arg(strDataTime).arg(context_info).arg(msg); #else const QString strMessage = QString("[%1] [%2]\t[%3]\t[%4]").arg(text).arg(strDataTime).arg(context_info).arg(msg); #endif // 输出信息到文件中 const QString strFilePath = QString(QDir::toNativeSeparators(QApplication::applicationDirPath()) + QDir::toNativeSeparators("/log/")); const QString strFileName = QString(strFilePath + QDateTime::currentDateTime().toString("yyyy-MM-dd").append("-log.txt")); if(!QDir(strFilePath).exists()){ QDir(strFilePath).mkdir(strFilePath); } QFile file(strFileName); file.open(QIODevice::ReadWrite | QIODevice::Append); QTextStream stream(&file); stream << strMessage << "\r\n"; file.flush(); file.close(); //解锁 mutex.unlock(); }