152 lines
4.3 KiB
C++
Raw Normal View History

2024-11-25 17:15:44 +08:00
#include <QApplication>
#include "cdatabaseinterface.h"
#include <QFile>
#include <QDebug>
#include <QMessageBox>
//#include "loginwidget.h"
#include "cmainwindow.h"
#include "readconfig.h"
#include "loginwidget.h"
#include "gamecontrol.h"
#include <QSharedMemory>
#include <QMutex>
#include <QFile>
#include <QObject>
#include "fescontroldialog.h"
#include <QSettings>
2024-11-26 16:21:02 +08:00
#include "BCIManager.h"
2024-11-25 17:15:44 +08:00
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
static QMutex mutex;
mutex.lock();
QString text;
switch(type)
{
2024-11-26 16:21:02 +08:00
case QtDebugMsg:
text = QString("Debug:");
break;
case QtWarningMsg:
text = QString("Warning:");
break;
case QtCriticalMsg:
text = QString("Critical:");
break;
case QtFatalMsg:
text = QString("Fatal:");
2024-11-25 17:15:44 +08:00
}
QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QString current_date = QString("(%1)").arg(current_date_time);
QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
QFile file("log.txt");
file.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream text_stream(&file);
text_stream << message << "\r\n";
file.flush();
file.close();
mutex.unlock();
}
#include <QDir>
#include <QSettings>
//设置程序自启动 appPath程序路径
void SetProcessAutoRunSelf(const QString &appPath)
{
//注册表路径需要使用双反斜杠如果是32位系统要使用QSettings::Registry32Format
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
QSettings::Registry64Format);
2024-11-26 16:21:02 +08:00
//以程序名称作为注册表中的键
2024-11-25 17:15:44 +08:00
//根据键获取对应的值(程序路径)
QFileInfo fInfo(appPath);
QString name = fInfo.baseName();
QString path = settings.value(name).toString();
//如果注册表中的路径和当前程序路径不一样,
//则表示没有设置自启动或自启动程序已经更换了路径
//toNativeSeparators的意思是将"/"替换为"\"
QString newPath = QDir::toNativeSeparators(appPath);
if (path != newPath)
{
settings.setValue(name, newPath);
2024-11-26 16:21:02 +08:00
qDebug() << "添加快捷启动注册表HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run,";
2024-11-25 17:15:44 +08:00
}
}
int main(int argc, char *argv[])
{
qputenv("QT_IM_MODULE", QByteArray("tgtsml"));
//qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
QApplication a(argc, argv);
//Qt开机自启动
//SetProcessAutoRunSelf(qApp->applicationFilePath());
#ifdef DEBUGON
2024-11-26 16:21:02 +08:00
qInstallMessageHandler(outputMessage);
2024-11-25 17:15:44 +08:00
#endif
2024-11-26 16:21:02 +08:00
BCIManager::registerQMLType();
2024-11-25 17:15:44 +08:00
//数据库读取
2024-11-26 16:21:02 +08:00
if(!CDatabaseInterface::getInstance()->openDB("./DependFile/DBFile/UpLow.db", "QSQLITE"))
{
qDebug() << "UpLow.db open failed!";
}
2024-11-25 17:15:44 +08:00
//配置文件读取
if(!ReadConfig::getInstance()->readConfigFile())
{
2024-11-26 16:21:02 +08:00
qDebug() << "配置文件读取失败";
2024-11-25 17:15:44 +08:00
return -1;
}
//读取游戏配置文件
GameControl::getInstance()->readGameConfigMsg();
//设置全局样式表
QFile file("./DependFile/QSS/app.txt");
if(file.open(QFile::ReadOnly))
{
QString styleSheet = QLatin1String(file.readAll());
qApp->setStyleSheet(styleSheet);
file.close();
}
else
{
QMessageBox::warning(NULL, "warning", "totalqss Open failed", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
QSharedMemory sharedMemory;
sharedMemory.setKey("main_Window");
if(sharedMemory.attach())
{
QMessageBox::warning(NULL, "Warning", ("不可重复开启进程"));
return 0;
}
LoginWidget login;//
CMainWindow w;
if(sharedMemory.create(1))
{
2024-11-26 16:21:02 +08:00
QObject::connect(&w, SIGNAL(signalShowCompleted()), &login, SLOT(slotShowCompleted()));
2024-11-25 17:15:44 +08:00
login.setWindowModality(Qt::WindowModal);//
login.exec(); //
w.show();
}
2024-11-26 16:21:02 +08:00
QObject::connect(&a, &QApplication::aboutToQuit, []()
{
FesControlDialog::getInstance()->turnoffDevice(1, 1);
2024-11-25 17:15:44 +08:00
});
return a.exec();
}