2022-01-04 18:11:48 +08:00
|
|
|
|
#include "mainwindow.h"
|
2022-08-25 18:37:24 +08:00
|
|
|
|
#include "LoUIClass/aboutdlg.h"
|
|
|
|
|
#include "LoUIClass/softconfigdialog.h"
|
|
|
|
|
#include "LoUIClass/updaterdialog.h"
|
|
|
|
|
#include "cfg.h"
|
|
|
|
|
#include "tools.h"
|
|
|
|
|
#include "wDevicesManager/upgradeapkdialog.h"
|
|
|
|
|
#include <QColorDialog>
|
|
|
|
|
#include <QDesktopServices>
|
2022-01-04 18:11:48 +08:00
|
|
|
|
#include <QLabel>
|
2022-08-25 18:37:24 +08:00
|
|
|
|
#include <QMenu>
|
|
|
|
|
#include <QMessageBox>
|
2022-01-04 18:11:48 +08:00
|
|
|
|
#include <QProcess>
|
2022-08-25 18:37:24 +08:00
|
|
|
|
#include <QSettings>
|
|
|
|
|
|
|
|
|
|
QWidget *gMainWin;
|
|
|
|
|
|
|
|
|
|
class ImgBtn : public QToolButton {
|
|
|
|
|
public:
|
|
|
|
|
ImgBtn() {
|
|
|
|
|
auto policy = sizePolicy();
|
|
|
|
|
policy.setHorizontalPolicy(QSizePolicy::Preferred);
|
|
|
|
|
setSizePolicy(policy);
|
|
|
|
|
connect(this, &QToolButton::toggled, this, [this](bool checked) {
|
|
|
|
|
setIcon(icons[checked ? 1 : 0]);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
void setIcons(const QIcon &unchecked, const QIcon &checked) {
|
|
|
|
|
setIcon(unchecked);
|
|
|
|
|
icons[0] = unchecked;
|
|
|
|
|
icons[1] = checked;
|
|
|
|
|
}
|
|
|
|
|
protected:
|
|
|
|
|
void enterEvent(QEvent *) override {
|
|
|
|
|
if(this->isChecked()) return;
|
|
|
|
|
setIcon(icons[1]);
|
|
|
|
|
}
|
|
|
|
|
void leaveEvent(QEvent *) override {
|
|
|
|
|
if(this->isChecked()) return;
|
|
|
|
|
setIcon(icons[0]);
|
|
|
|
|
}
|
|
|
|
|
QIcon icons[2];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent) : BaseWin(parent) {
|
|
|
|
|
gMainWin = this;
|
|
|
|
|
QMenu *menuLang = new QMenu();
|
|
|
|
|
QAction *actLan = nullptr;
|
|
|
|
|
QAction *actCN = new QAction("中文");
|
|
|
|
|
actCN->setCheckable(true);
|
|
|
|
|
actCN->setObjectName("zh_CN");
|
|
|
|
|
QAction *actTW = new QAction("中文繁体");
|
|
|
|
|
actTW->setCheckable(true);
|
|
|
|
|
actTW->setObjectName("zh_TW");
|
|
|
|
|
QAction *actEn = new QAction("English");
|
|
|
|
|
actEn->setCheckable(true);
|
|
|
|
|
actEn->setObjectName("en");
|
|
|
|
|
QAction *actJa = new QAction("日本語");
|
|
|
|
|
actJa->setCheckable(true);
|
|
|
|
|
actJa->setObjectName("ja");
|
|
|
|
|
menuLang->addAction(actCN);
|
|
|
|
|
menuLang->addAction(actTW);
|
|
|
|
|
menuLang->addAction(actEn);
|
|
|
|
|
menuLang->addAction(actJa);
|
|
|
|
|
langGrp = new QActionGroup(menuLang);
|
|
|
|
|
langGrp->addAction(actCN);
|
|
|
|
|
langGrp->addAction(actTW);
|
|
|
|
|
langGrp->addAction(actEn);
|
|
|
|
|
langGrp->addAction(actJa);
|
|
|
|
|
connect(menuLang, &QMenu::triggered, this, [this](QAction* action) {
|
|
|
|
|
auto lanName = action->objectName();
|
|
|
|
|
translator.load("app_"+lanName, ":/i18n");
|
|
|
|
|
transQt.load("qt_"+lanName, ":/i18n");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
QSettings settings;
|
|
|
|
|
settings.remove("MainSetting");
|
|
|
|
|
settings.remove("MainWindowMaximized");
|
|
|
|
|
settings.remove("posMainWindow");
|
|
|
|
|
settings.remove("sizeMainWindow");
|
|
|
|
|
settings.remove("DirectlyConnectNetWork");
|
|
|
|
|
QString langName = settings.value("Language").toString();
|
|
|
|
|
if(! langName.isEmpty()) {
|
|
|
|
|
if(langName.endsWith("CN")) actLan = actCN;
|
|
|
|
|
else if(langName.endsWith("TW")) actLan = actTW;
|
|
|
|
|
else if(langName.startsWith("en")) actLan = actEn;
|
|
|
|
|
else if(langName.startsWith("ja")) actLan = actJa;
|
|
|
|
|
}
|
|
|
|
|
if(actLan==nullptr) {
|
|
|
|
|
langName = QLocale().name();
|
|
|
|
|
if(langName.endsWith("TW")) actLan = actTW;
|
|
|
|
|
else if(langName.startsWith("en")) actLan = actEn;
|
|
|
|
|
else if(langName.startsWith("ja")) actLan = actJa;
|
|
|
|
|
else actLan = actCN;
|
|
|
|
|
}
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
actLan->setChecked(true);
|
|
|
|
|
auto lanName = actLan->objectName();
|
|
|
|
|
translator.load("app_"+lanName, ":/i18n");
|
|
|
|
|
transQt.load("qt_"+lanName, ":/i18n");
|
|
|
|
|
QApplication::installTranslator(&translator);
|
|
|
|
|
QApplication::installTranslator(&transQt);
|
|
|
|
|
|
|
|
|
|
auto geo = settings.value("MainGeo").toRect();
|
|
|
|
|
if(geo.width()>=800 && geo.height()>=500 && geo.x()>=-600 && geo.x()<=1280 && geo.y()>=-200 && geo.y()<=720) setGeometry(geo);
|
|
|
|
|
else resize(1280, 720);
|
|
|
|
|
if(settings.value("MainIsMax", false).toBool()) setWindowState(Qt::WindowMaximized);
|
|
|
|
|
|
|
|
|
|
setWindowTitle("LedOK Express");
|
|
|
|
|
icon.load(":/res/Logo.png");
|
|
|
|
|
titlePos = QPointF(26, 80);
|
|
|
|
|
iconPos = QPointF(38, 20);
|
|
|
|
|
setStyleSheet(Tools::styleSheet());
|
|
|
|
|
auto plt = palette();
|
|
|
|
|
plt.setBrush(QPalette::Window, QColor(0xdddddd));
|
|
|
|
|
setPalette(plt);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
|
|
|
|
//项目保存的文档路径
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QString doc_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
if(!doc_path.isEmpty()) {
|
2022-08-25 18:37:24 +08:00
|
|
|
|
QDir app_dir = QDir(doc_path + "/" + QApplication::applicationName());
|
2022-01-04 18:11:48 +08:00
|
|
|
|
if(!app_dir.exists()) {
|
|
|
|
|
QDir doc_dir(doc_path);
|
2022-08-25 18:37:24 +08:00
|
|
|
|
doc_dir.mkdir(QApplication::applicationName());
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//创建一个垂直布局
|
2022-08-25 18:37:24 +08:00
|
|
|
|
auto vBox = new QVBoxLayout(center);
|
|
|
|
|
vBox->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
vBox->setSpacing(0);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
//自定义的标题上的工具栏创建(语言和设置选项)
|
|
|
|
|
m_wTitle = new LoQTitleBar(this);
|
|
|
|
|
installEventFilter(m_wTitle);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
//水平布局,放置配置按钮,最小化,最大化,关闭按钮
|
|
|
|
|
QHBoxLayout *pLayout = new QHBoxLayout(m_wTitle);
|
|
|
|
|
pLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
pLayout->addStretch();
|
|
|
|
|
|
|
|
|
|
bn_Setting = new QPushButton();
|
|
|
|
|
bn_Setting->setIcon(QIcon(":/res/AppSetting.png"));
|
|
|
|
|
pLayout->addWidget(bn_Setting);
|
|
|
|
|
pLayout->addWidget(m_wTitle->bn_Minimize);
|
|
|
|
|
pLayout->addWidget(m_wTitle->bn_Maximize);
|
|
|
|
|
pLayout->addWidget(m_wTitle->bn_Close);
|
|
|
|
|
|
|
|
|
|
QMenu *menu_setting = new QMenu();
|
|
|
|
|
act_lang = new QAction();
|
|
|
|
|
act_lang->setMenu(menuLang);
|
|
|
|
|
menu_setting->addAction(act_lang);
|
|
|
|
|
|
|
|
|
|
act_softconfiguration = new QAction(tr("Software Configuration"));
|
|
|
|
|
act_softconfiguration->setObjectName("Software Configuration");
|
|
|
|
|
menu_setting->addAction(act_softconfiguration);
|
|
|
|
|
|
|
|
|
|
act_update = new QAction(tr("Check for updates"));
|
|
|
|
|
act_update->setObjectName("Update");
|
|
|
|
|
menu_setting->addAction(act_update);
|
|
|
|
|
|
|
|
|
|
act_updatefirmware = new QAction(tr("firmware manager"));
|
|
|
|
|
act_updatefirmware->setObjectName("Update firmware");
|
|
|
|
|
menu_setting->addAction(act_updatefirmware);
|
|
|
|
|
|
|
|
|
|
act_help = new QAction();
|
|
|
|
|
act_help->setObjectName("Help");
|
|
|
|
|
menu_setting->addAction(act_help);
|
|
|
|
|
|
|
|
|
|
auto actInfo = new QAction(tr("Info"));
|
|
|
|
|
connect(actInfo, &QAction::triggered, this, [this] {
|
|
|
|
|
QMessageBox::information(this, tr("Info"),
|
|
|
|
|
QString("SupportsSsl: ").append(QSslSocket::supportsSsl()?"true":"false")
|
|
|
|
|
.append("\nSslLibraryBuildVersion: ").append(QSslSocket::sslLibraryBuildVersionString().append(" (").append(QString::number(QSslSocket::sslLibraryBuildVersionNumber())).append(")"))
|
|
|
|
|
.append("\nSslLibraryVersion: ").append(QSslSocket::sslLibraryVersionString()).append(" (").append(QString::number(QSslSocket::sslLibraryVersionNumber())).append(")"));
|
|
|
|
|
});
|
|
|
|
|
menu_setting->addAction(actInfo);
|
|
|
|
|
|
|
|
|
|
act_about = new QAction(tr("About"));
|
|
|
|
|
act_about->setObjectName("About");
|
|
|
|
|
menu_setting->addAction(act_about);
|
|
|
|
|
|
|
|
|
|
bn_Setting->setMenu(menu_setting);//按钮上添加下拉菜单
|
|
|
|
|
bn_Setting->setToolTip(tr("Setting"));
|
|
|
|
|
|
|
|
|
|
connect(menu_setting, &QMenu::triggered, this, [this](QAction* act) {
|
|
|
|
|
if(act->objectName()=="About") {
|
|
|
|
|
AboutDlg pDlg(this);
|
|
|
|
|
pDlg.exec();
|
|
|
|
|
}else if(act->objectName()=="Help") {
|
|
|
|
|
auto act = langGrp->checkedAction();
|
|
|
|
|
if(act==0) return;
|
|
|
|
|
QDesktopServices::openUrl(QUrl::fromLocalFile(QCoreApplication::applicationDirPath()+"/help/"+act->objectName()+".pdf"));
|
|
|
|
|
} else if(act->objectName()=="Update") {
|
|
|
|
|
UpdaterDialog *pDlg=new UpdaterDialog(this);
|
|
|
|
|
pDlg->exec();
|
|
|
|
|
} else if(act->objectName()=="Update firmware") {
|
|
|
|
|
auto dlg = new UpgradeApkDialog(this);
|
|
|
|
|
dlg->showMaximized();
|
|
|
|
|
} else if(act->objectName()=="Software Configuration") {
|
|
|
|
|
SoftConfigDialog *pDlg=new SoftConfigDialog(this);
|
|
|
|
|
pDlg->exec();
|
|
|
|
|
mBtnGrp->button(MainPage_LoraScreen)->setVisible(gShowLoraScreen);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
QSimpleUpdater *updater = QSimpleUpdater::getInstance();
|
|
|
|
|
connect(updater, &QSimpleUpdater::checkingFinished, this, [this]() {
|
|
|
|
|
if(QSimpleUpdater::getInstance()->getUpdateAvailable(UpdVerUrl)) {//如果版本大于
|
|
|
|
|
if(QSimpleUpdater::getInstance()->getUpdateSameVersionAvailable(UpdVerUrl)) bn_Setting->setStyleSheet("image: url(:/res/AppSetting.png);");//如果同样的版本,不显示红点提示
|
|
|
|
|
else {//如果不同
|
|
|
|
|
bn_Setting->setStyleSheet("image: url(:/res/AppSettingTip.png);");
|
|
|
|
|
QIcon icon(":/res/reddot.png");
|
|
|
|
|
act_update->setIcon(icon);
|
|
|
|
|
}
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
else bn_Setting->setStyleSheet("image: url(:/res/AppSetting.png);");
|
|
|
|
|
});
|
|
|
|
|
updater->setModuleVersion(UpdVerUrl, APP_VERSION);
|
|
|
|
|
updater->setNotifyOnUpdate(UpdVerUrl, false);
|
|
|
|
|
updater->setNotifyOnFinish(UpdVerUrl, false);
|
|
|
|
|
updater->checkForUpdates(UpdVerUrl);
|
|
|
|
|
vBox->addWidget(m_wTitle);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
//设备管理,节目管理,高级节目管理页创建
|
|
|
|
|
mDevicePanel = new DevicePanel();
|
|
|
|
|
mProgPanel = new ProgPanel();
|
|
|
|
|
m_wGuangYingPinWidget = new mGuangYingPinWidget();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
auto hBox = new QHBoxLayout();
|
|
|
|
|
hBox->setSpacing(2);
|
|
|
|
|
|
|
|
|
|
mBtnGrp = new QButtonGroup(this);
|
|
|
|
|
hBox->addSpacing(144);
|
|
|
|
|
for(int i=0; i<MainPage_End; i++) {
|
|
|
|
|
auto btn = new ImgBtn();
|
|
|
|
|
btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
|
|
|
|
|
btn->setCheckable(true);
|
|
|
|
|
btn->setIconSize(QSize(40,40));
|
|
|
|
|
btn->setProperty("ss", "MainTab");
|
|
|
|
|
if(i==MainPage_DeviceManager) btn->setIcons(QIcon{":/res/DeviceManager_u.png"}, QIcon{":/res/DeviceManager_s.png"});
|
|
|
|
|
else if(i==MainPage_ProgManager) btn->setIcons(QIcon{":/res/ProgramManager_u.png"}, QIcon{":/res/ProgramManager_s.png"});
|
|
|
|
|
else if(i==MainPage_Setting) btn->setIcons(QIcon{":/res/DeviceSetting_u.png"}, QIcon{":/res/DeviceSetting_s.png"});
|
|
|
|
|
else if(i==MainPage_LoraScreen) btn->setIcons(QIcon{":/res/GuangYingPin_u.png"}, QIcon{":/res/GuangYingPin_s.png"});
|
|
|
|
|
hBox->addWidget(btn);
|
|
|
|
|
mBtnGrp->addButton(btn, i);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
vBox->addLayout(hBox);
|
|
|
|
|
|
|
|
|
|
wgts[MainPage_DeviceManager] = mDevicePanel;
|
|
|
|
|
wgts[MainPage_ProgManager] = mProgPanel;
|
|
|
|
|
wgts[MainPage_Setting] = mDevicePanel;
|
|
|
|
|
wgts[MainPage_LoraScreen] = m_wGuangYingPinWidget;
|
|
|
|
|
|
|
|
|
|
vBox->addWidget(wgts[curIndex]);//初始化响应页面为终端管理页面
|
|
|
|
|
|
|
|
|
|
mBtnGrp->button(curIndex)->setChecked(true);
|
|
|
|
|
|
|
|
|
|
connect(mBtnGrp, &QButtonGroup::idToggled, this, [this, vBox](int id, bool checked) {
|
|
|
|
|
if(!checked || id==curIndex) return;
|
|
|
|
|
if((id==MainPage_DeviceManager && curIndex==MainPage_Setting) || (id==MainPage_Setting && curIndex==MainPage_DeviceManager)){
|
|
|
|
|
mDevicePanel->ShowDevicesInfoOrControlWidget(id);
|
|
|
|
|
curIndex = id;
|
|
|
|
|
} else {
|
|
|
|
|
vBox->replaceWidget(wgts[curIndex], wgts[id]);
|
|
|
|
|
wgts[curIndex]->setParent(0);
|
|
|
|
|
curIndex = id;
|
|
|
|
|
if(curIndex == MainPage_DeviceManager || curIndex == MainPage_Setting) {
|
|
|
|
|
//开启UDP定时器
|
|
|
|
|
gUdp->mUdpTimer.start(60000);
|
|
|
|
|
int cnt = mDevicePanel->mDeviceTable->topLevelItemCount();
|
|
|
|
|
for(int i=0; i<cnt; i++) {
|
|
|
|
|
auto item = static_cast<DeviceItem*>(mDevicePanel->mDeviceTable->topLevelItem(i));
|
|
|
|
|
item->mHeartbeatTimer.start(60000);
|
|
|
|
|
item->DeviceItemHttpPost();
|
|
|
|
|
}
|
|
|
|
|
mDevicePanel->ShowDevicesInfoOrControlWidget(id);
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
});
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
hBox = new QHBoxLayout();
|
|
|
|
|
m_pOneKeyCheckCard = new QPushButton;
|
|
|
|
|
m_pOneKeyCheckCard->setCursor(Qt::PointingHandCursor);
|
|
|
|
|
m_pOneKeyCheckCard->setProperty("ssType", "progManageTool");
|
|
|
|
|
connect(m_pOneKeyCheckCard, &QPushButton::clicked, this, [this] {
|
|
|
|
|
auto res = QMessageBox::warning(this, tr("Tip Info"), tr("RestoreLedCardIpByUdpTip"), QMessageBox::Ok, QMessageBox::Cancel);
|
|
|
|
|
if(res == QMessageBox::Ok) mDevicePanel->pNetComm->RestoreLedCardIpByUdpCmd();
|
|
|
|
|
});
|
|
|
|
|
hBox->addWidget(m_pOneKeyCheckCard);
|
|
|
|
|
hBox->addStretch();
|
|
|
|
|
|
|
|
|
|
vBox->addLayout(hBox);
|
|
|
|
|
|
|
|
|
|
gTextAntialiasing = settings.value("TextAntialiasing", false).toBool();
|
|
|
|
|
gShowLoraScreen = settings.value("GuangYingPin", false).toBool();
|
|
|
|
|
if(! gShowLoraScreen) mBtnGrp->button(MainPage_LoraScreen)->hide();
|
|
|
|
|
if(settings.value("AddFirewallFlag").toString() !="1") {
|
|
|
|
|
//添加exe到win防火墙例外
|
|
|
|
|
auto appFile = QCoreApplication::applicationFilePath();
|
|
|
|
|
appFile.replace('/','\\');
|
|
|
|
|
QProcess cmd;
|
|
|
|
|
connect(&cmd, &QProcess::readyReadStandardOutput, this, [&cmd] {
|
|
|
|
|
qDebug()<<"out"<<QString::fromLocal8Bit(cmd.readAllStandardOutput());
|
|
|
|
|
});
|
|
|
|
|
connect(&cmd, &QProcess::readyReadStandardError, this, [&cmd] {
|
|
|
|
|
qDebug()<<"err"<<QString::fromLocal8Bit(cmd.readAllStandardError());
|
|
|
|
|
});
|
|
|
|
|
qDebug()<<"Add Firewall"<<appFile;
|
|
|
|
|
cmd.start("netsh advfirewall firewall add rule name=\"allow LedOK\" dir=in program=\""+appFile+"\"", {"security=authnoencap", "action=allow"});
|
|
|
|
|
cmd.waitForFinished();
|
|
|
|
|
|
|
|
|
|
appFile = QApplication::applicationDirPath()+"\\LedSet\\LedSet3.0.exe";
|
|
|
|
|
appFile.replace('/','\\');
|
|
|
|
|
qDebug()<<"Add Firewall"<<appFile;
|
|
|
|
|
cmd.start("netsh advfirewall firewall add rule name=\"allow LedOK\" dir=in program=\""+appFile+"\"", {"security=authnoencap", "action=allow"});
|
|
|
|
|
cmd.waitForFinished();
|
|
|
|
|
settings.setValue("AddFirewallFlag", "1");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
transUi();
|
|
|
|
|
|
|
|
|
|
int ci = 0;
|
|
|
|
|
int grays[] = {0, 0x22, 0x44, 0x66, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
|
|
|
|
|
for(; ci < 12; ci++) QColorDialog::setStandardColor(ci, QColor(grays[ci], grays[ci], grays[ci]));
|
|
|
|
|
int higs[] = {0x80, 0xff, 0xff};
|
|
|
|
|
int mids[] = {0x40, 0x80, 0xbf};
|
|
|
|
|
int lows[] = { 0, 0, 0x7f};
|
|
|
|
|
for(int i=0; i<3; i++) {
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(higs[i], lows[i], lows[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(higs[i], higs[i], lows[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(lows[i], higs[i], lows[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(lows[i], higs[i], higs[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(lows[i], lows[i], higs[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(higs[i], lows[i], higs[i]));
|
|
|
|
|
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(higs[i], lows[i], mids[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(higs[i], mids[i], lows[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(mids[i], higs[i], lows[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(lows[i], higs[i], mids[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(lows[i], mids[i], higs[i]));
|
|
|
|
|
QColorDialog::setStandardColor(ci++, QColor(mids[i], lows[i], higs[i]));
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
// auto btn = new QPushButton("Test");
|
|
|
|
|
// hBox->addWidget(btn);
|
|
|
|
|
// connect(btn, &QPushButton::clicked, btn, [this] {
|
|
|
|
|
// test();
|
|
|
|
|
// });
|
|
|
|
|
}
|
|
|
|
|
void MainWindow::test() {
|
|
|
|
|
QNetworkRequest request{QUrl{"http://localhost/stock/test/timeout"}};
|
|
|
|
|
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
|
|
|
|
request.setTransferTimeout(4000);
|
|
|
|
|
auto doReply = [](QNetworkReply *reply) {
|
|
|
|
|
auto err = reply->error();
|
|
|
|
|
if(err != QNetworkReply::NoError) {
|
|
|
|
|
qDebug()<<"Error"<<err;
|
|
|
|
|
return;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
auto status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
|
|
|
|
if(status != 200) {
|
|
|
|
|
qDebug()<<"status"<<status;
|
|
|
|
|
return;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
auto req = reply->request();
|
|
|
|
|
qDebug()<<"reply url"<<reply->url();
|
|
|
|
|
qDebug()<<"req url"<<req.url();
|
|
|
|
|
auto resp = reply->readAll();
|
|
|
|
|
qDebug()<<"resp"<<resp;
|
|
|
|
|
};
|
|
|
|
|
auto reply = Tools::netManager().get(request);
|
|
|
|
|
connect(reply, &QNetworkReply::finished, this, [reply, doReply, request] {
|
|
|
|
|
reply->deleteLater();
|
|
|
|
|
if(reply->error() != QNetworkReply::OperationCanceledError) {
|
|
|
|
|
doReply(reply);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
qDebug()<<"timeout again";
|
|
|
|
|
auto reply = Tools::netManager().get(request);
|
|
|
|
|
reply->connect(reply, &QNetworkReply::finished, reply, [reply, doReply] {
|
|
|
|
|
reply->deleteLater();
|
|
|
|
|
doReply(reply);
|
|
|
|
|
});
|
|
|
|
|
});
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
MainWindow::~MainWindow() {
|
|
|
|
|
QSettings settings;
|
|
|
|
|
auto act = langGrp->checkedAction();
|
|
|
|
|
if(act) settings.setValue("Language", act->objectName());
|
|
|
|
|
settings.setValue("MainGeo", normalGeometry());
|
|
|
|
|
settings.setValue("MainIsMax", isMaximized());
|
2022-01-04 18:11:48 +08:00
|
|
|
|
|
2022-08-25 18:37:24 +08:00
|
|
|
|
if(m_pTimerSendResoreIpOneKey!=nullptr) {
|
|
|
|
|
if(m_pTimerSendResoreIpOneKey->isActive()) m_pTimerSendResoreIpOneKey->stop();
|
|
|
|
|
delete m_pTimerSendResoreIpOneKey;
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
void MainWindow::changeEvent(QEvent *event) {
|
|
|
|
|
BaseWin::changeEvent(event);
|
|
|
|
|
if(event->type() == QEvent::LanguageChange) transUi();
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|
2022-08-25 18:37:24 +08:00
|
|
|
|
void MainWindow::transUi() {
|
|
|
|
|
m_wTitle->refreshLable();
|
|
|
|
|
mBtnGrp->button(MainPage_DeviceManager)->setText(tr("Device"));
|
|
|
|
|
mBtnGrp->button(MainPage_ProgManager)->setText(tr("Program"));
|
|
|
|
|
mBtnGrp->button(MainPage_Setting)->setText(tr("Control"));
|
|
|
|
|
mBtnGrp->button(MainPage_LoraScreen)->setText(tr("GuangYinPin"));
|
|
|
|
|
m_pOneKeyCheckCard->setText(tr("Check card"));
|
|
|
|
|
act_lang->setText(tr("Language"));
|
|
|
|
|
act_help->setText(tr("Help"));
|
|
|
|
|
act_about->setText(tr("About"));
|
|
|
|
|
act_update->setText(tr("Check for updates"));
|
|
|
|
|
act_updatefirmware->setText(tr("firmware manager"));
|
|
|
|
|
act_softconfiguration->setText(tr("Software Configuration"));
|
|
|
|
|
bn_Setting->setToolTip(tr("Setting"));
|
2022-01-04 18:11:48 +08:00
|
|
|
|
}
|