104 lines
3.8 KiB
C++
Raw Normal View History

2026-07-11 16:02:57 +08:00
#include "mainwindow.h"
#include <QApplication>
2026-07-20 11:58:49 +08:00
#include <QCommandLineOption>
#include <QCommandLineParser>
#include <QDir>
#include <QFileInfo>
2026-07-11 16:02:57 +08:00
#include <QIcon>
#include <QMessageBox>
#include <QObject>
#include "AuthView.h"
#include "SingleInstanceManager.h"
2026-07-20 11:58:49 +08:00
#include "Version.h"
2026-07-11 16:02:57 +08:00
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
2026-07-20 11:58:49 +08:00
app.setApplicationName(QStringLiteral("ParkingSpaceGuideApp"));
app.setApplicationVersion(QString::fromLatin1(GetParkingSpaceGuideVersion()));
2026-07-11 16:02:57 +08:00
app.setWindowIcon(QIcon(":/common/resource/logo.png"));
2026-07-20 11:58:49 +08:00
QCommandLineParser parser;
parser.setApplicationDescription(QObject::tr("停机引导程序"));
parser.addHelpOption();
parser.addVersionOption();
const QCommandLineOption simulateDirectoryOption(
QStringList{QStringLiteral("s"),
QStringLiteral("simulate-dir"),
QStringLiteral("sim-dir")},
QObject::tr("从目录中的多帧 TXT 和 BMP 数据运行仿真。"),
QObject::tr("目录"));
const QCommandLineOption simulationIntervalOption(
QStringList{QStringLiteral("sim-interval"),
QStringLiteral("sim-interval-ms")},
QObject::tr("仿真检测周期(毫秒),默认 100。"),
QObject::tr("毫秒"),
QStringLiteral("100"));
const QCommandLineOption simulationLoopOption(
QStringList{QStringLiteral("sim-loop")},
QObject::tr("循环回放整个多帧仿真目录。"));
parser.addOption(simulateDirectoryOption);
parser.addOption(simulationIntervalOption);
parser.addOption(simulationLoopOption);
parser.process(app);
ParkingSpaceGuideSimulationOptions simulationOptions;
simulationOptions.enabled = parser.isSet(simulateDirectoryOption);
simulationOptions.loop = parser.isSet(simulationLoopOption);
if (simulationOptions.enabled) {
const QFileInfo directoryInfo(parser.value(simulateDirectoryOption));
if (!directoryInfo.exists() || !directoryInfo.isDir()) {
QMessageBox::critical(
nullptr,
QObject::tr("仿真参数错误"),
QObject::tr("仿真数据目录不存在或不是目录:\n%1")
.arg(directoryInfo.absoluteFilePath()));
return 2;
}
bool intervalValid = false;
const int intervalMs = parser.value(simulationIntervalOption)
.toInt(&intervalValid);
if (!intervalValid || intervalMs < 1 || intervalMs > 60000) {
QMessageBox::critical(
nullptr,
QObject::tr("仿真参数错误"),
QObject::tr("--sim-interval 必须是 1 到 60000 之间的毫秒数。"));
return 2;
}
simulationOptions.dataDirectory = QDir::cleanPath(
directoryInfo.absoluteFilePath());
simulationOptions.frameIntervalMs = intervalMs;
} else if (parser.isSet(simulationIntervalOption) ||
parser.isSet(simulationLoopOption)) {
QMessageBox::critical(
nullptr,
QObject::tr("仿真参数错误"),
QObject::tr("--sim-interval 和 --sim-loop 必须与 --simulate-dir 一起使用。"));
return 2;
}
2026-07-11 16:02:57 +08:00
SingleInstanceManager instanceManager("ParkingSpaceGuideApp_SingleInstance_Key");
if (instanceManager.isAnotherInstanceRunning()) {
QMessageBox messageBox;
messageBox.setWindowTitle(QObject::tr("应用已运行"));
messageBox.setText(QObject::tr("停机引导程序已在运行。"));
2026-07-11 16:02:57 +08:00
messageBox.addButton(QObject::tr("确定"), QMessageBox::AcceptRole);
messageBox.exec();
return 0;
}
if (!AuthView::CheckAndShow(nullptr)) {
return 0;
}
2026-07-20 11:58:49 +08:00
MainWindow window(simulationOptions);
2026-07-11 16:02:57 +08:00
window.show();
return app.exec();
}