main.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. #include <QFile>
  4. #include <QMessageLogContext>
  5. #include <QDebug>
  6. #include <QDateTime>
  7. #include <QDir>
  8. #include <QMutex>
  9. void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg);
  10. int main(int argc, char *argv[])
  11. {
  12. // 安装消息处理函数
  13. qInstallMessageHandler(outputMessage);
  14. QApplication a(argc, argv);
  15. MainWindow w;
  16. w.show();
  17. return a.exec();
  18. }
  19. void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
  20. {
  21. static QMutex mutex;
  22. mutex.lock();
  23. QByteArray localMsg = msg.toLocal8Bit();
  24. QString text;
  25. switch (type) {
  26. case QtDebugMsg:
  27. text = QString("Debug:");
  28. break;
  29. case QtWarningMsg:
  30. text = QString("Warning:");
  31. break;
  32. case QtCriticalMsg:
  33. text = QString("Critical:");
  34. break;
  35. case QtFatalMsg:
  36. text = QString("Fatal:");
  37. break;
  38. default:
  39. text = QString("Debug:");
  40. break;
  41. }
  42. // 输出信息格式
  43. const QString context_info = QString("File:(%1)").arg(QString(context.file));
  44. const QString strDataTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
  45. #ifdef DEBUG
  46. const QString strMessage = QString("[%1] [%2]\t[%3]\t[%4]").arg(text).arg(strDataTime).arg(context_info).arg(msg);
  47. #else
  48. const QString strMessage = QString("[%1] [%2]\t[%3]\t[%4]").arg(text).arg(strDataTime).arg(context_info).arg(msg);
  49. #endif
  50. // 输出信息到文件中
  51. const QString strFilePath = QString(QDir::toNativeSeparators(QApplication::applicationDirPath()) + QDir::toNativeSeparators("/log/"));
  52. const QString strFileName = QString(strFilePath + QDateTime::currentDateTime().toString("yyyy-MM-dd").append("-log.txt"));
  53. if(!QDir(strFilePath).exists()){
  54. QDir(strFilePath).mkdir(strFilePath);
  55. }
  56. QFile file(strFileName);
  57. file.open(QIODevice::ReadWrite | QIODevice::Append);
  58. QTextStream stream(&file);
  59. stream << strMessage << "\r\n";
  60. file.flush();
  61. file.close();
  62. //解锁
  63. mutex.unlock();
  64. }