main.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include <QApplication>
  2. #include <QCoreApplication>
  3. #include <QCommandLineParser>
  4. #include <QDebug>
  5. #include <QDir>
  6. #include <QLocale>
  7. #include <QProcess>
  8. #include <QSettings>
  9. #include <QTranslator>
  10. #include "messagequeue.h"
  11. #include "processthread.h"
  12. #include "qdatetime.h"
  13. #include "qobject.h"
  14. #include "qtsingleapplication.h"
  15. #include "updaterthread.h"
  16. void addToStartup()
  17. {
  18. QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
  19. QSettings::NativeFormat);
  20. QString appPath = QCoreApplication::applicationFilePath(); // 获取应用程序路径
  21. settings.setValue("BaseMainApp", appPath); // 将应用程序路径添加到注册表
  22. }
  23. void redirectOutputToLogFile()
  24. {
  25. // 重定向 qDebug、qWarning 和 qCritical 的输出
  26. qInstallMessageHandler([](QtMsgType type,
  27. const QMessageLogContext &context,
  28. const QString &msg) { // 获取当前日期
  29. Q_UNUSED(context)
  30. QString dateString = QDate::currentDate().toString("yyyy-MM-dd");
  31. // 获取应用程序的日志文件路径
  32. QString logFileName = "./log/" + dateString + "_base.txt";
  33. // 创建 QFile 对象
  34. QFile logFile(logFileName);
  35. // 打开文件进行写入,如果文件不存在则创建
  36. if (!logFile.open(QIODevice::Append | QIODevice::Text)) {
  37. qWarning() << "Unable to open log file for writing:" << logFile.errorString();
  38. return;
  39. }
  40. QTextStream out(&logFile);
  41. QString timeString = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
  42. switch (type) {
  43. case QtDebugMsg:
  44. out << timeString << " [DEBUG] " << msg << "\n";
  45. break;
  46. case QtWarningMsg:
  47. out << timeString << " [WARNING] " << msg << "\n";
  48. break;
  49. case QtCriticalMsg:
  50. out << timeString << " [CRITICAL] " << msg << "\n";
  51. break;
  52. case QtFatalMsg:
  53. out << timeString << " [FATAL] " << msg << "\n";
  54. // abort(); // 终止程序
  55. case QtInfoMsg:
  56. break;
  57. }
  58. logFile.close();
  59. });
  60. }
  61. int main(int argc, char *argv[])
  62. {
  63. // QApplication a(argc, argv);
  64. SharedTools::QtSingleApplication a("BaseMainApp", argc, argv);
  65. QDir dir;
  66. dir.mkdir("log"); // 创建日志目录
  67. addToStartup(); // 开机启动
  68. redirectOutputToLogFile(); // 日志
  69. a.setApplicationVersion("1.1.2");
  70. a.setQuitOnLastWindowClosed(false);
  71. QCommandLineParser parser;
  72. parser.addHelpOption();
  73. parser.addVersionOption();
  74. QCommandLineOption debugOption("debug", "Enable debug mode");
  75. parser.addOption(debugOption);
  76. parser.process(a);
  77. if (a.isRunning()) {
  78. a.sendMessage("", 1000);
  79. return 0;
  80. }
  81. QTranslator translator;
  82. const QStringList uiLanguages = QLocale::system().uiLanguages();
  83. for (const QString &locale : uiLanguages) {
  84. const QString baseName = "basemain_" + QLocale(locale).name();
  85. if (translator.load(":/i18n/" + baseName)) {
  86. a.installTranslator(&translator);
  87. break;
  88. }
  89. }
  90. UpdaterThread thread;
  91. ProcessThread Process;
  92. MessageQueue messageQueue;
  93. QObject::connect(&Process, &ProcessThread::messageBox, &messageQueue, &MessageQueue::addMessage);
  94. QObject::connect(&Process, &ProcessThread::finished, &Process, &QObject::deleteLater);
  95. thread.start();
  96. Process.start();
  97. return a.exec();
  98. }