| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include <QApplication>
- #include <QCoreApplication>
- #include <QCommandLineParser>
- #include <QDebug>
- #include <QDir>
- #include <QLocale>
- #include <QProcess>
- #include <QSettings>
- #include <QTranslator>
- #include "messagequeue.h"
- #include "processthread.h"
- #include "qdatetime.h"
- #include "qobject.h"
- #include "qtsingleapplication.h"
- #include "updaterthread.h"
- void addToStartup()
- {
- QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run",
- QSettings::NativeFormat);
- QString appPath = QCoreApplication::applicationFilePath(); // 获取应用程序路径
- settings.setValue("BaseMainApp", appPath); // 将应用程序路径添加到注册表
- }
- void redirectOutputToLogFile()
- {
- // 重定向 qDebug、qWarning 和 qCritical 的输出
- qInstallMessageHandler([](QtMsgType type,
- const QMessageLogContext &context,
- const QString &msg) { // 获取当前日期
- Q_UNUSED(context)
- QString dateString = QDate::currentDate().toString("yyyy-MM-dd");
- // 获取应用程序的日志文件路径
- QString logFileName = "./log/" + dateString + "_base.txt";
- // 创建 QFile 对象
- QFile logFile(logFileName);
- // 打开文件进行写入,如果文件不存在则创建
- if (!logFile.open(QIODevice::Append | QIODevice::Text)) {
- qWarning() << "Unable to open log file for writing:" << logFile.errorString();
- return;
- }
- QTextStream out(&logFile);
- QString timeString = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
- switch (type) {
- case QtDebugMsg:
- out << timeString << " [DEBUG] " << msg << "\n";
- break;
- case QtWarningMsg:
- out << timeString << " [WARNING] " << msg << "\n";
- break;
- case QtCriticalMsg:
- out << timeString << " [CRITICAL] " << msg << "\n";
- break;
- case QtFatalMsg:
- out << timeString << " [FATAL] " << msg << "\n";
- // abort(); // 终止程序
- case QtInfoMsg:
- break;
- }
- logFile.close();
- });
- }
- int main(int argc, char *argv[])
- {
- // QApplication a(argc, argv);
- SharedTools::QtSingleApplication a("BaseMainApp", argc, argv);
- QDir dir;
- dir.mkdir("log"); // 创建日志目录
- addToStartup(); // 开机启动
- redirectOutputToLogFile(); // 日志
- a.setApplicationVersion("1.1.2");
- a.setQuitOnLastWindowClosed(false);
- QCommandLineParser parser;
- parser.addHelpOption();
- parser.addVersionOption();
- QCommandLineOption debugOption("debug", "Enable debug mode");
- parser.addOption(debugOption);
- parser.process(a);
- if (a.isRunning()) {
- a.sendMessage("", 1000);
- return 0;
- }
- QTranslator translator;
- const QStringList uiLanguages = QLocale::system().uiLanguages();
- for (const QString &locale : uiLanguages) {
- const QString baseName = "basemain_" + QLocale(locale).name();
- if (translator.load(":/i18n/" + baseName)) {
- a.installTranslator(&translator);
- break;
- }
- }
- UpdaterThread thread;
- ProcessThread Process;
- MessageQueue messageQueue;
- QObject::connect(&Process, &ProcessThread::messageBox, &messageQueue, &MessageQueue::addMessage);
- QObject::connect(&Process, &ProcessThread::finished, &Process, &QObject::deleteLater);
- thread.start();
- Process.start();
- return a.exec();
- }
|