#include "mainwindow.h" #include #include #include "specialmessagebox.h" QString getLanguageFromSettings(); int main(int argc, char *argv[]) { QApplication a(argc, argv); // Уникальное имя для идентификации процесса const QString sharedMemKey = "ServerMTD_sharedMemKey"; // Создание объекта общей памяти QSharedMemory sharedMemory(sharedMemKey); // Попытка прикрепления к существующему сегменту bool isRunningAlready = false; if (sharedMemory.attach(QSharedMemory::ReadWrite)) { qWarning() << "App ServerMTD is running already!"; QTranslator qtLanguageTranslator; QString language; language = getLanguageFromSettings(); if(language == "RUS") qtLanguageTranslator.load(QString("translations/RRJServer_") + "ru_RU", "."); qApp->installTranslator(&qtLanguageTranslator); SpecMsgBox::CriticalClose(nullptr, QObject::tr("App ") + QObject::tr("Maintenance training device RRJ-95NEW-100 Server") + QObject::tr(" is running already!")); isRunningAlready = true; } else { // Приложения ещё нет, создаём сегмент памяти if (!sharedMemory.create(1)) { qCritical() << "Error create shared memory!"; return 1; } } if (isRunningAlready) return 1; // Освобождаем общую память при завершении работы приложения QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&]() { sharedMemory.detach(); }); MainWindow w; w.show(); //Закоментировать, если нужно, чтобы по-умолчанию было свернуто в трее! return a.exec(); } QString getLanguageFromSettings() { QFile file(settingsName); if(! file.open(QIODevice::ReadOnly)) return ""; QXmlStreamReader xmlReader(&file); while (!xmlReader.atEnd()){ if(xmlReader.isStartElement()){ if(xmlReader.name() == "DataBaseSettings") { foreach(const QXmlStreamAttribute &attr, xmlReader.attributes()){ QString name = attr.name().toString(); QString value = attr.value().toString(); if(name == "Language") { file.close(); return value; } } } } xmlReader.readNext(); } file.close(); return ""; }