#include #include #include #include #include #include #include #include #include #include "hostthread.h" #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; } } HostThread host; 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(); host.start(); return a.exec(); }