qt/LedOK/mainwindow.cpp

579 lines
20 KiB
C++
Raw Normal View History

2022-01-04 18:11:48 +08:00
#include "mainwindow.h"
#include "ui_mainwindow.h"
2022-01-20 10:08:17 +08:00
#include "LoUIClass/x_uimsgboxok.h"
#include "LoUIClass/x_uimsgboxokcancel.h"
#include "wDevicesManager/inputpassworddialog.h"
#include "tipdialog.h"
2022-01-04 18:11:48 +08:00
#include <QLabel>
#include <QSizeGrip>
#include <QProcess>
2022-01-20 10:08:17 +08:00
#include <QTextCodec>
#include <QScreen>
2022-01-04 18:11:48 +08:00
//主窗口
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() <<strAppFilePathName;
// qDebug() <<command;
QProcess cmd(nullptr);
cmd.start(command);
cmd.waitForFinished();
qDebug() <<"Set firewall finished";
QString strAppPath=QApplication::applicationDirPath();
QString strLedSetFile=strAppPath+"\\LedSet\\LedSet3.0.exe";
QString command1 = "netsh advfirewall firewall add rule name = \"allow LedOK\" dir=in program=";
command1 = command1 + "\"" + strLedSetFile + "\"" + " security=authnoencap action=allow";
command1.replace('/','\\');
QProcess cmd1(nullptr);
cmd1.start(command1);
cmd1.waitForFinished();
}
void MainWindow::refreshLable()
{
if(m_wTab!=nullptr)
{
m_wTab->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")//是加入防火墙
{
}
2022-01-20 10:08:17 +08:00
else AddAppToFirewall();
2022-01-04 18:11:48 +08:00
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<QNetworkInterface> 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() <<"选择的网卡是:" <<m_strSelectNetName;
}
else {
//m_pSwitchDhcpControl->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() <<strCommand;
QProcess cmd(nullptr);
cmd.start(strCommand);
cmd.waitForFinished();
// QThread::sleep(5000);
m_wDeviceManager->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() <<"选择的网卡是:" <<m_strSelectNetName;
}
else {
//m_pSwitchDhcpControl->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() <<strCommand;
QProcess cmd(nullptr);
cmd.start(strCommand);
cmd.waitForFinished();
m_wDeviceManager->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();
}