#include "mainwindow.h" #include "ui_mainwindow.h" #include "LoUIClass/x_uimsgboxok.h" #include "LoUIClass/x_uimsgboxokcancel.h" #include "wDevicesManager/inputpassworddialog.h" #include "tipdialog.h" #include #include #include #include #include //主窗口 NetComm *p_globaNetComm=nullptr; static const QString FILE_NAME_TRANSLATOR{ "\\qt_zh_CN.qm" }; MainWindow::MainWindow(QWidget *parent) : LoQMainWindow(parent), ui(new Ui::MainWindow), m_Translator(nullptr) { LoAppConfig *cfg = LoAppConfig::getInstance(); QCoreApplication::setOrganizationName(cfg->OrganizationName()); QCoreApplication::setOrganizationDomain(cfg->OrganizationDomain()); QCoreApplication::setApplicationName(cfg->ApplicationName()); setStyleSheet(cfg->styleSheet()); //窗口UI ui->setupUi(this); ui->wMainWnd->setProperty("ssBackground", "dark"); ui->wStatus ->setProperty("ssBackground", "dark"); ui->wMainWnd->setProperty("ssPrettify", "fillet"); ui->wStatus ->setProperty("ssPrettify", "fillet"); //为状态栏添加DHCP开关按钮 // QHBoxLayout *pStatusHLayout = new QHBoxLayout(); //m_LableDhcp = new QLabel(tr("DHCP Service")); m_LableDhcp = new QLabel(tr("RJ45 Cable directly connected")); // QLabel *LableDhcp1 = new QLabel(" 3223"); m_LableDhcp->setStyleSheet("padding-left:5px"); //pStatusHLayout->addWidget(LableDhcp); m_pSwitchDhcpControl = new SwitchControl(); /* m_pSwitchDhcpControl->setSliderColor(QColor(145, 145, 145),QColor(0, 160, 230)); m_pSwitchDhcpControl->setTextColor(QColor(145, 145, 145),QColor(0, 160, 230)); m_pSwitchDhcpControl->setStyleSheet("margin-right:35px"); m_pSwitchDhcpControl->setFixedSize(66,30); m_pSwitchDhcpControl->setText(tr("OFF"),tr("ON")); connect(m_pSwitchDhcpControl, SIGNAL(checkedChanged(bool)), this, SLOT(onDhcpSwitcherToggled(bool))); m_pSwitchDhcpControl->setButtonStyle(SwitchControl::ButtonStyle_CircleIn); //ui->wStatus->setLayout() ui->wStatus->addWidget(m_LableDhcp); ui->wStatus->addWidget(m_pSwitchDhcpControl); */ m_pOneKeyCheckCard = new QPushButton(tr("Check card")); m_pOneKeyCheckCard->setCursor(Qt::PointingHandCursor); m_pOneKeyCheckCard->setProperty("ssType", "progManageTool"); m_pOneKeyCheckCard->setStyleSheet("margin-left:5px"); //m_pOneKeyCheckCard->setStyleSheet("bord-color:#008d8d ; bord-size:2px"); ui->wStatus->addWidget(m_pOneKeyCheckCard); //ui->wStatus->setSizeGripEnabled(true); //QSizeGrip *grip =new QSizeGrip(ui->wStatus); // grip->setVisible(true); // ui->wStatus->addWidget(LableDhcp1); //ui->wStatus->adjustSize(); // ui->wStatus->addWidget(LableDhcp,2); // ui->wStatus->setLayout(pStatusHLayout); // ui->wStatus->setSizeGripEnabled(true); //pSwitchDhcpControl->setToolTip(tr("1.This function is only used to connect to the termianl via Ethernet cable and the terminal is assignned with a dynamic IP address.\r\n2.Please turn off the firewall or turn on ICMP echo before you turn on DHCP.\r\n3.If the connection is unstable,set a static IP address for your PC.")); //ui->wStatus->setToolTip(tr("DhcpTip")); // ui->wStatus->setToolTip(tr("DhcpTip4")+".\r\n"+tr("DhcpTip5")+".\r\n"+tr("DhcpTip6")+"."); //项目保存的文档路径 QString doc_path = cfg->DocumentsLocation(); if(!doc_path.isEmpty()) { QDir app_dir = QDir(doc_path + MACRO_FENGEFU + cfg->ApplicationName()); if(!app_dir.exists()) { QDir doc_dir(doc_path); doc_dir.mkdir(cfg->ApplicationName()); } } //创建软件logo图标 QRect rect; QLabel *pIcon = new QLabel(this); pIcon->setObjectName(tr("MainWndIcon")); pIcon->setPixmap(QPixmap(":/res/Logo.png")); pIcon->adjustSize(); rect = pIcon->geometry(); rect.setX(50); rect.setY(30); rect.setWidth(pIcon->width()); rect.setHeight(pIcon->height()); pIcon->setGeometry(rect); //创建软件的标题 // masked by alahover 20200203 QLabel *pTitle = new QLabel(this); // QFont font; // font.setFamily("宋体"); // // font.setBold(false); // font.setWeight(1); // //font.setItalic(true); // font.setPixelSize(18); // pTitle->setFont(font); //pTitle->setText("V1.0.0.1"); pTitle->setStyleSheet("font-size:12px;font-weight:100;"); pTitle->setText("LedOK Express"); pTitle->setObjectName("MainWndTitle"); pTitle->adjustSize(); rect.setX(50); rect.setY(72); rect.setWidth(pTitle->width()); rect.setHeight(pTitle->height()); pTitle->setGeometry(rect); //自定义的标题上的工具栏创建(语言和设置选项) m_wTitle = new mTitleBar(ui->wMainWnd); installEventFilter(m_wTitle); connect(m_wTitle, SIGNAL(sigLanguageChanged(const QString&)), this, SLOT(onLanguageChanged(const QString&))); connect(m_wTitle, SIGNAL(sigGuangYingPinChanged()), this, SLOT(onGuangYingPinChanged())); //设备管理,节目管理,高级节目管理页创建 m_wDeviceManager = new mDeviceManager(); m_wProgramManager = new mProgramManager(); // m_wProgramManagerA = new mProgramManagerA(); m_wGuangYingPinWidget = new mGuangYingPinWidget(); //m_wDeviceSetting = new mDeviceSetting(); //QWidget *wWidget3 = new QWidget(); //m_wTab = new mTabWidget(m_wDeviceManager, m_wProgramManager, m_wProgramManagerA, this); //m_wTab = new mTabWidget(m_wDeviceManager, m_wProgramManager, m_wProgramManagerA, m_wDeviceSetting, this); m_wTab = new mTabWidget(m_wDeviceManager, m_wProgramManager, nullptr, m_wDeviceManager,m_wGuangYingPinWidget, this); connect(m_wTab,SIGNAL(sigOpenDeviceUdpTimer(bool)),m_wDeviceManager->pNetComm,SLOT(OnStartUdpTimer(bool))); connect(m_wTab,SIGNAL(sigOpenDeviceUdpTimer(bool)),m_wDeviceManager,SLOT(OnStopAllItemPostHeartBeat(bool))); //创建一个水平布局,水平布局里左右留12个0空格,中间放入页部件 QHBoxLayout *pTabLayout = new QHBoxLayout(); //pTabLayout->setSpacing(20);//MainWindow父类为QMainWindow,在QMainWindow及其子类中使用layout不起作用。 pTabLayout->addSpacing(6); pTabLayout->addWidget(m_wTab); pTabLayout->addSpacing(6); pTabLayout->setContentsMargins(0, 0, 0, 0); //创建一个垂直布局 QVBoxLayout *pLayout = new QVBoxLayout(); pLayout->addWidget(m_wTitle, 0); pLayout->addLayout(pTabLayout, 1); pLayout->setSpacing(0); pLayout->setContentsMargins(0, 0, 0, 0); ui->wMainWnd->setLayout(pLayout); m_wTitle->setupLang(); readSettings(); connect(m_pOneKeyCheckCard, SIGNAL(clicked()), this, SLOT(RestoreLedCardIpByUdpCmd())); connect(this, SIGNAL(sigRestorLedCardIpByUdpCmd()), m_wDeviceManager->pNetComm, SLOT(RestoreLedCardIpByUdpCmd())); QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName()); if(settings->value("TextAntialiasing").isValid()) { if(settings->value("TextAntialiasing").toBool()) { m_globBoolFontantialiasing=true; } else { m_globBoolFontantialiasing=false; } } else { m_globBoolFontantialiasing=false; } #ifdef MACRO_YUANHENG_VERSION timer = new QTimer(this); timer->setInterval(5); connect(timer, SIGNAL(timeout()), this, SLOT(InputPasswordDlg())); timer->start(); #endif } void MainWindow::RestoreLedCardIpByUdpCmd() { X_UIMsgBoxOkCancel *dlg = new X_UIMsgBoxOkCancel(tr("Tip Info"),tr("RestoreLedCardIpByUdpTip"), this); if(dlg->exec() == QDialog::Accepted) { qDebug()<<"sigRestorLedCardIpByUdpCmd"; emit sigRestorLedCardIpByUdpCmd(); } else { } } MainWindow::~MainWindow() { writeSettings(); if(m_Translator!=nullptr) delete m_Translator; if(m_wTitle!=nullptr) delete m_wTitle; if(m_wTab!=nullptr) delete m_wTab; if(m_pSwitchDhcpControl!=nullptr) delete m_pSwitchDhcpControl; if(m_LableDhcp!=nullptr) delete m_LableDhcp; if(m_pOneKeyCheckCard!=nullptr) delete m_pOneKeyCheckCard; if(m_wStatus!=nullptr) delete m_wStatus; if(m_pTimerSendResoreIpOneKey!=nullptr) { if(m_pTimerSendResoreIpOneKey->isActive()) m_pTimerSendResoreIpOneKey->stop(); delete m_pTimerSendResoreIpOneKey; } delete ui; } void MainWindow::AddAppToFirewall() { //添加exe到win防火墙例外 QString strAppFilePathName=QCoreApplication::applicationFilePath(); QString command = "netsh advfirewall firewall add rule name = \"allow LedOK\" dir=in program="; command = command + "\"" + strAppFilePathName + "\"" + " security=authnoencap action=allow"; command.replace('/','\\'); // qDebug() <refreshLable(); } if(m_wDeviceManager!=nullptr) { m_wDeviceManager->refreshLable(); } if(m_wProgramManager!=nullptr) { m_wProgramManager->refreshLable(); } if(m_wGuangYingPinWidget!=nullptr) { m_wGuangYingPinWidget->refreshLable(); } if(m_wTitle!=nullptr) { m_wTitle->refreshLable(); } // ui->wStatus->setToolTip(tr("DhcpTip4")+".\r\n"+tr("DhcpTip5")+".\r\n"+tr("DhcpTip6")+"."); // m_LableDhcp->setText(tr("DHCP Service")); m_LableDhcp->setText(tr("RJ45 Cable directly connected")); m_pOneKeyCheckCard->setText(tr("Check card")); } /* 语言切换响应函数 */ void MainWindow::onLanguageChanged(const QString &lan) { qDebug() << "MainWindow::onLanguageChanged:" << lan; if(m_Translator!= nullptr) { qApp->removeTranslator(m_Translator); delete m_Translator; m_Translator = nullptr; } m_Translator = new QTranslator(this); if(m_Translator->load(":/" + lan)) { qApp->installTranslator(m_Translator); } if(m_TranslatorCustom!= nullptr) { qApp->removeTranslator(m_TranslatorCustom); delete m_TranslatorCustom; m_TranslatorCustom = nullptr; } if(m_TranslatorQtSys!= nullptr) { qApp->removeTranslator(m_TranslatorQtSys); delete m_TranslatorQtSys; m_TranslatorQtSys = nullptr; } if(lan=="zhCN") { m_TranslatorCustom = new QTranslator(this); if(m_TranslatorCustom->load(":/widgets_cn")) qApp->installTranslator(m_TranslatorCustom); m_TranslatorQtSys = new QTranslator(this); if (m_TranslatorQtSys->load(QApplication::applicationDirPath()+ FILE_NAME_TRANSLATOR)) { qApp->installTranslator(m_TranslatorQtSys); } } else if(lan=="zhTH") { m_TranslatorCustom = new QTranslator(this); if(m_TranslatorCustom->load(":/widgets_th")) qApp->installTranslator(m_TranslatorCustom); m_TranslatorQtSys = new QTranslator(this); if (m_TranslatorQtSys->load(QApplication::applicationDirPath()+ FILE_NAME_TRANSLATOR)) { qApp->installTranslator(m_TranslatorQtSys); } } refreshLable(); /*#if 1 if(m_Translator == nullptr) { m_Translator = new QTranslator(this); } qApp->removeTranslator(m_Translator); if(m_Translator->load(":/" + lan)) { qApp->installTranslator(m_Translator); ui->retranslateUi(this); } else { QMessageBox::critical(this, tr("Error"), tr("Load new language failed !")); } #else // qApp->removeTranslator(m_Translator); // if(false == m_Translator->load(":/" + lan)) { // QMessageBox::critical(this, tr("Error"), tr("Load new language failed !")); // qApp->installTranslator(m_Translator); // ui->retranslateUi(this); // } #endif */ } void MainWindow::readSettings() { LoAppConfig *cfg = LoAppConfig::getInstance(); QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName()); QVariant iMaxFlag=settings->value("MainWindowMaximized"); QVariant iAddFirewallFlag=settings->value("AddFirewallFlag"); if (iAddFirewallFlag.toString() =="1")//是加入防火墙 { } else AddAppToFirewall(); setWindowState(Qt::WindowMaximized); } void MainWindow::writeSettings() { LoAppConfig *cfg = LoAppConfig::getInstance(); QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName()); settings->setValue("AddFirewallFlag", "1"); if (windowState() & Qt::WindowMaximized)//是最大化状态 { settings->setValue("MainWindowMaximized", "1"); } else { settings->setValue("posMainWindow", this->pos()); settings->setValue("sizeMainWindow", QSize(this->width(), this->height())); settings->setValue("MainWindowMaximized", "0"); } settings->setValue("DirectlyConnectNetWork", m_strSelectNetName); } void MainWindow::onDhcpSwitcherToggled(bool b) { QList ifaceList = QNetworkInterface::allInterfaces(); QStringList selectNetworklist; for (int i = 0; i < ifaceList.count(); i++) { QNetworkInterface var = ifaceList.at(i); if(var.type()==QNetworkInterface::Ethernet) { QString strTemp=var.humanReadableName(); QString strtemplower=strTemp.toLower(); if(strtemplower.contains("bluetooth")||strtemplower.contains("蓝牙")) break; selectNetworklist.append(strtemplower); } } int iCount=selectNetworklist.count(); if(iCount<=0) { //没有检测到计算机网卡 //m_pSwitchDhcpControl->setToggle(false); m_pSwitchDhcpControl->setEnabled(false); m_pOneKeyCheckCard->setEnabled(false); X_UIMsgBoxOk *pDlg=new X_UIMsgBoxOk(tr("Tip"),tr("No available network was detected"),this,0); pDlg->exec(); return; } if(b)//直连,设置计算机IP地址为192.168.0.168,掩码255.255.255.0,网关192.168.0.1 { if(iCount==1) { m_strSelectNetName=selectNetworklist.at(0); } else if(iCount>1){//人工选择和控制卡直连的网卡 TipDialog *dlg = new TipDialog(this,ENUM_SELECT_NETWORK,&selectNetworklist,0); connect(dlg, SIGNAL(sigAcceptData(QString,QString)), this, SLOT(onCmdSetNetworkBySelect(QString,QString))); if(dlg->exec() == QDialog::Accepted) { // QMessageBox::warning(this, "Title", "Text"); qDebug() <<"选择的网卡是:" <setChecked(false); //m_pSwitchDhcpControl->setCheckedStatus(false); m_pSwitchDhcpControl->setEnabled(false); m_pOneKeyCheckCard->setEnabled(false); return; } } QString strCommand="netsh interface ip set address name="; strCommand=strCommand+"\""+m_strSelectNetName+"\" static 192.168.0.88 255.255.255.0 192.168.0.1"; qDebug() <pNetComm->RestoreLedCardIpByUdpCmdBefore(m_strSelectNetName); m_pOneKeyCheckCard->setEnabled(true); // QThread::sleep(0.5); // m_pOneKeyCheckCard->click(); if(m_pTimerSendResoreIpOneKey==nullptr) { m_pTimerSendResoreIpOneKey = new QTimer(); connect(m_pTimerSendResoreIpOneKey,SIGNAL(timeout()),this, SLOT(OnTimeoutSendResoreIpOneKey())); } m_pTimerSendResoreIpOneKey->start(2000); } else {//关闭直连,设置计算机为自动获取ip地址 if(iCount==1) { m_strSelectNetName=selectNetworklist.at(0); } else if(iCount>1){//人工选择和控制卡直连的网卡 TipDialog *dlg = new TipDialog(this,ENUM_SELECT_NETWORK,&selectNetworklist,1); connect(dlg, SIGNAL(sigAcceptData(QString,QString)), this, SLOT(onCmdSetNetworkBySelect(QString,QString))); if(dlg->exec() == QDialog::Accepted) { // QMessageBox::warning(this, "Title", "Text"); qDebug() <<"选择的网卡是:" <setToggle(false); m_pSwitchDhcpControl->setEnabled(true); m_pOneKeyCheckCard->setEnabled(false); return; } } // m_wDeviceManager->pNetComm->RestoreLedCardIpToDhcpByUdpCmd(m_strSelectNetName);//屏蔽词句,在终端设置中通过post去修改ip,不再使用udp去配置控制卡的dhcp QString strCommand="netsh interface ip set address name="; strCommand=strCommand+"\""+m_strSelectNetName+"\" source=dhcp"; qDebug() <pNetComm->RestoreLedCardIpByUdpCmdBefore(""); m_strSelectNetName=""; m_pOneKeyCheckCard->setEnabled(false); } writeSettings(); } void MainWindow::OnTimeoutSendResoreIpOneKey() { m_pTimerSendResoreIpOneKey->stop(); m_pOneKeyCheckCard->click(); } void MainWindow::onCmdSetNetworkBySelect(QString strNetwork,QString strTip1) { Q_UNUSED(strTip1); m_strSelectNetName=strNetwork; } void MainWindow::onGuangYingPinChanged() { if(m_wTab!=nullptr) m_wTab->onGuangYingPinChanged(); } QString MainWindow::GetPasswordPro() { LoAppConfig *cfg = LoAppConfig::getInstance(); QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName()); #ifndef MACRO_YUANHENG_VERSION QString strMiWenPs=settings->value("advUiPs").toString(); #else QString strMiWenPs=settings->value("advUiPs_YuanHeng").toString(); #endif QString result = QTextCodec::codecForName("GBK")->toUnicode(QByteArray::fromBase64(strMiWenPs.toLocal8Bit())); QString strPs=result; if(strPs.isEmpty()) { #ifndef MACRO_YUANHENG_VERSION return "888"; #else return "Cargo10065!@#"; #endif } else { return strPs; } } void MainWindow::onInputPasswordPro(QString strPassword) { //#ifndef MACRO_YUANHENG_VERSION // if(strPassword=="888") // #else // if(strPassword=="Cargo10065!@#") // #endif if(strPassword==GetPasswordPro()) { } else { InputPasswordDialog *pDlg1=new InputPasswordDialog(this,2); connect(pDlg1, SIGNAL(sigAcceptData(QString)), this, SLOT(onInputPasswordPro(QString))); connect(pDlg1, SIGNAL(rejected()), window(), SLOT(close())); pDlg1->setWindowModality(Qt::WindowModal); pDlg1->exec(); } } void MainWindow::InputPasswordDlg() { timer->stop(); InputPasswordDialog *pDlg=new InputPasswordDialog(this,0); connect(pDlg, SIGNAL(sigAcceptData(QString)), this, SLOT(onInputPasswordPro(QString))); connect(pDlg, SIGNAL(rejected()), window(), SLOT(close())); pDlg->setWindowModality(Qt::WindowModal); pDlg->exec(); // close(); }