#include #include #include #include #include #include #include #include #include #define _IN_MAIN_CPP #include "main.h" #include "mctype/patternsingleboard/mainUI/mainwidget.h" QString switchLanguage(int language,QDir appPath) { QString sourcePath,targetPath; targetPath = appPath.path() + appPath.separator() + "language.qm"; switch (language) { case chinese://中文 sourcePath = appPath.path() + appPath.separator() + "chinese.qm"; break; case english://英文 sourcePath = appPath.path() + appPath.separator() + "english.qm"; break; case ukrainian://乌克兰文 sourcePath = appPath.path() + appPath.separator() + "ukrainian.qm"; break; case french://法文 sourcePath = appPath.path() + appPath.separator() + "france.qm"; break; case russian://俄语 sourcePath = appPath.path() + appPath.separator() + "russian.qm"; break; case german://德文 sourcePath = appPath.path() + appPath.separator() + "german.qm"; break; default://中文 sourcePath = appPath.path() + appPath.separator() + "chinese.qm"; break; } QFile::remove(targetPath); QFile::copy(sourcePath,targetPath); #ifdef Q_OS_LINUX system("sync"); #endif return targetPath; } void setMcMainWindow(QApplication &app, QSplashScreen *splash, s16 HMIDecrypt, s16 connectMode) { //创建主窗口 MainWidget mainwindow; //初始化主窗口 mainwindow.initMcTypeWindows(); mainwindow.initAllWindows(HMIDecrypt,connectMode); mainwindow.show();//显示窗口 //mainwindow.setWindowIcon(QIcon(":/images/1024x600/rp.png")); splash->finish(NULL); app.exec();//开始执行应用程序 } int main(int argc, char *argv[]) { QApplication app(argc, argv);//此处必须用QApplication,否则QSplashScreen不能使用 QSharedMemory shared_memory; shared_memory.setKey(QString("main_window"));//设置固定共享内存段的key值 if(shared_memory.attach()) //尝试将进程附加到该共享内存段,避免windows下重开程序 { return 0; } //支持中文编码 QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); //文件路径 QDir apppath(qApp->applicationDirPath()); qDebug()<<"apppath:"<loadSetting(configfile); QFile iniFile(configfile); int language = 0; s16 connectMode = 0; s16 gatewayConnectMode = 0; if(!iniFile.exists())//配置文件不存在 { QMap settings; settings["Pattern/name"] = ""; settings["HMI/resolution"] = resolution1006; settings["HMI/theme"] = theme1; settings["HMI/language"] = chinese; settings["HMI/FrontSize"] = FONTSIZE; settings["HMI/machineType"] = MACHINE_HIGHSPEEDSINGLEQUI; settings["HMI/productType"] = PRODUCT_NULL; settings["HMI/debugMode"] = nodebugMode;//界面调试模式 settings["HMI/waterMark"] = 1;//0:主背景图不带水印 1:主背景图带水印 settings["HMI/paraSort"] = 0;//0:参数不分类显示 1:参数分类显示 settings["HMI/connectMode"] = 0;//连接方式(通讯方式,网口或串口) settings["HMI/passwordOne"] = g_passwordOne; settings["IOT/gatewayConnectMode"] = 0;//网关连接方式(连接方式,网口或串口) settings["IOT/rackNumber"] = 0;//机架号 settings["DateTime/second"] = 0; settings["HeadBreakLineNum"] = 0;//写入机头断线次数 settings["HMI/splitStep"] = 1;//是否分割针步 settings["MaxSpeedOfMainSewWork"] = 0;//主轴缝纫工作最高转速 g_pSettings->writeToIniFile(settings); g_emResolut = resolution1006; g_emTheme = theme1; language = chinese; g_emDebugMode = nodebugMode; g_emMacType = MACHINE_HIGHSPEEDSINGLEQUI; g_emProductType = PRODUCT_NULL; g_passwordOne = PASSWORD_ONE; g_fontsize = FONTSIZE; } else { int frontSize = g_pSettings->readFromIniFile("HMI/FrontSize").toInt(); if((8 > frontSize) || (frontSize > 18)) { g_pSettings->writeOneToIniFile("HMI/FrontSize",FONTSIZE); g_fontsize = FONTSIZE; } g_fontsize = g_pSettings->readFromIniFile("HMI/FrontSize").toInt(); g_emResolut = (Resolution)(g_pSettings->readFromIniFile("HMI/resolution").toInt()); g_emTheme = (Theme)(g_pSettings->readFromIniFile("HMI/theme").toInt()); //这个情况是,存在配置文件的时候,很可能是只有DateTime/second,读不到主题,就是0(图片加载不出来),二级密码也会没有 //为了防止配置文件里没有debugMode时升级黑屏,因为界面调试模式是后来新加的,之前版本的配置文件里没有,兼容之前的版本 -rq QString debugModeStr = "HMI/debugMode"; if(g_pSettings->ifKeyExists(debugModeStr) == true) { g_emDebugMode =(DebugMode)(g_pSettings->readFromIniFile("HMI/debugMode").toInt());//如果存在配置文件,并且有这个key就读配置文件里的调试模式的值 } else { g_pSettings->writeOneToIniFile("HMI/debugMode",nodebugMode);//界面调试模式 g_emDebugMode = nodebugMode; } language = g_pSettings->readFromIniFile("HMI/language").toInt(); g_emDebugMode =(DebugMode)(g_pSettings->readFromIniFile("HMI/debugMode").toInt());//如果存在配置文件,就读配置文件里的调试模式的值 g_emMacType = (MachineType)(g_pSettings->readFromIniFile("HMI/machineType").toInt()); g_emProductType = (ProductType)(g_pSettings->readFromIniFile("HMI/productType").toInt()); connectMode = g_pSettings->readFromIniFile("HMI/connectMode").toInt(); g_passwordOne = g_pSettings->readFromIniFile("HMI/passwordOne").toString(); if(g_passwordOne.isEmpty()) g_passwordOne = PASSWORD_ONE; gatewayConnectMode = g_pSettings->readFromIniFile("IOT/gatewayConnectMode").toInt(); g_xCorrectionFactor = 1.0; g_yCorrectionFactor = 1.0; } //自动获取屏幕分辨率 #ifdef Q_OS_LINUX QDesktopWidget * desktop = QApplication::desktop(); QRect screenRect = desktop->screenGeometry(); int width = screenRect.width(); int height = screenRect.height(); if(width == 1920 && height == 1080) { g_emResolut = resolution1910; } else if(width == 1024 && height == 600) { g_emResolut = resolution1006; } else if(width == 800 && height == 480) { g_emResolut = resolution0804; } #endif //多语言翻译 QString languageFile = switchLanguage(language,apppath); qDebug()<<"languageFile:"<setPixmap(QPixmap(":/images/startlogo1006.png")); } else if(g_emResolut == resolution0804) { splash->setPixmap(QPixmap(":/images/startlogo0804.png")); } else if(g_emResolut == resolution1910) { splash->setPixmap(QPixmap(":/images/startlogo1910.png")); } QFont font; font.setPixelSize(20); splash->setFont(font); //splash->move(0,0); splash->move(0+g_mainWidgetPos.x(),0+g_mainWidgetPos.y()); int waterMark = g_pSettings->readFromIniFile("HMI/waterMark").toInt();//是否带水印 if(waterMark==1)//带logo { splash->show();//显示启动画面 } //检测界面解密的配置文件是否存在 //界面解密配置文件路径 s16 HMIDecrypt = 1;//1代表已授权解密过,0代表未授权解密过 QString HMIDecryptConfigfile; HMIDecryptConfigfile = apppath.path() + apppath.separator() + "HMIDecryptConfig.ini"; QFile HMIDecryptIniFile(HMIDecryptConfigfile); if(!HMIDecryptIniFile.exists())//不存在界面解密的文件(已发机器),可与主板建立连接 { HMIDecrypt = 1; } else//存在界面解密的文件,判断是否解密过来决定是否与主板建立连接 { QSettings iniSetting(HMIDecryptConfigfile, QSettings::IniFormat); HMIDecrypt = iniSetting.value("HMIDecrypt/ifdecrypt").toInt(); } g_pMachine = NULL; QString mcConfigfile; mcConfigfile = apppath.path() + apppath.separator() + "mcconfig.ini"; g_pMachine = new Machine(); //创建下位机通讯 g_pMachine->initConnectMode(connectMode);//初始化通讯连接方式 g_pMachine->setComportName(""); //名字为空 g_pMachine->setConfigFileName(mcConfigfile);//配置文件 if(HMIDecrypt != 0) { g_pMachine->startCommunication();//启动线程 } //物联网客户端与mqtt网关服务器建立连接 g_pLotMachine = NULL; QString lotConfigfile; lotConfigfile = apppath.path() + apppath.separator() + "lotconfig.ini"; g_pLotMachine = new LotMachine(); //创建网关通讯 g_pLotMachine->initConnectMode(gatewayConnectMode);//初始化通讯连接方式 g_pLotMachine->setComportName(""); g_pLotMachine->setConfigFileName(lotConfigfile); g_pLotMachine->startCommunication(); g_pCurEmbData = new EmbData(); #ifdef Q_OS_WIN //win下防止多个程序打开 if(shared_memory.create(1)) //创建1byte的共享内存段 { setMcMainWindow(app,splash,HMIDecrypt,connectMode); } #endif #ifdef Q_OS_LINUX setMcMainWindow(app,splash,HMIDecrypt,connectMode); #endif delete splash; delete g_pSettings; delete g_pMachine; delete g_pCurEmbData; return 0; }