2025-08-20 23:06:28 +08:00
|
|
|
|
#include "LaunchPage.h"
|
|
|
|
|
|
#include "ui_LaunchPage.h"
|
2025-09-28 17:14:34 +08:00
|
|
|
|
#include <QHBoxLayout>
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-20 23:06:28 +08:00
|
|
|
|
#if CONFIG_EN_SUB_THREAD //是否开启子进程
|
|
|
|
|
|
#include <Threads/SubThread.h>
|
|
|
|
|
|
SubThread LP_ST;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
LaunchPage::LaunchPage(QWidget *parent)
|
|
|
|
|
|
: QWidget(parent)
|
|
|
|
|
|
, ui(new Ui::LaunchPage)
|
|
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
setWindowFlag(Qt::FramelessWindowHint); // 设置窗口无边框,设置后窗口无法移动
|
|
|
|
|
|
setAttribute(Qt::WA_TranslucentBackground, true);
|
|
|
|
|
|
TrayIconInit();
|
2025-09-28 17:14:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ============= 2. 延迟创建子页面 ============= */
|
|
|
|
|
|
m_delayInitTimer = new QTimer(this);
|
|
|
|
|
|
m_delayInitTimer->setSingleShot(true);
|
|
|
|
|
|
connect(m_delayInitTimer, &QTimer::timeout, this, &LaunchPage::createPages);
|
|
|
|
|
|
m_delayInitTimer->start(100); // 0 ms 即可,让事件循环先跑一帧
|
2025-08-20 23:06:28 +08:00
|
|
|
|
WinInit();
|
|
|
|
|
|
#if CONFIG_EN_SUB_THREAD //是否开启子进程
|
|
|
|
|
|
LP_ST.start();
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
LaunchPage::~LaunchPage()
|
|
|
|
|
|
{
|
|
|
|
|
|
#if CONFIG_EN_SUB_THREAD //是否开启子进程
|
|
|
|
|
|
LP_ST.KillThread();
|
|
|
|
|
|
#endif
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
|
|
|
|
|
void LaunchPage::TrayIconInit()
|
|
|
|
|
|
{
|
|
|
|
|
|
//托盘初始化
|
|
|
|
|
|
QIcon icon = QIcon("logo.png");
|
|
|
|
|
|
trayIcon = new QSystemTrayIcon(this);
|
|
|
|
|
|
trayIcon->setIcon(icon);
|
|
|
|
|
|
trayIcon->setToolTip("郑煤机-掘锚一体机");
|
|
|
|
|
|
trayIcon->show(); //必须调用,否则托盘图标不显示
|
|
|
|
|
|
|
|
|
|
|
|
//创建菜单项动作(以下动作只对windows有效)
|
|
|
|
|
|
minimizeAction = new QAction("隐藏", this);
|
|
|
|
|
|
connect(minimizeAction, SIGNAL(triggered()), this, SLOT(
|
|
|
|
|
|
hide()
|
|
|
|
|
|
)); //绑定信号槽
|
|
|
|
|
|
|
|
|
|
|
|
restoreAction = new QAction("还原", this);
|
|
|
|
|
|
connect(restoreAction, SIGNAL(triggered()), this, SLOT(
|
|
|
|
|
|
showNormal()
|
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
quitAction = new QAction("退出", this);
|
|
|
|
|
|
connect(quitAction, &QAction::triggered, this, [this]() {
|
|
|
|
|
|
// 退出应用程序
|
|
|
|
|
|
qApp->quit();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//创建托盘菜单(必须先创建动作,后添加菜单项,还可以加入菜单项图标美化)
|
|
|
|
|
|
trayIconMenu = new QMenu(this);
|
|
|
|
|
|
trayIconMenu->addAction(minimizeAction);
|
|
|
|
|
|
trayIconMenu->addAction(restoreAction);
|
|
|
|
|
|
trayIconMenu->addSeparator();
|
|
|
|
|
|
trayIconMenu->addAction(quitAction);
|
|
|
|
|
|
trayIcon->setContextMenu(trayIconMenu);
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-15 22:28:43 +08:00
|
|
|
|
// connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
|
|
|
|
|
|
// this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
|
2025-08-20 23:06:28 +08:00
|
|
|
|
|
2025-09-28 17:14:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
void LaunchPage::createPages(){
|
|
|
|
|
|
/* ============= 1. 只把主窗口 show 出来 ============= */
|
|
|
|
|
|
ui->LoaderList->addItem("窗口创建->正在创建公共窗口...");
|
|
|
|
|
|
P00_PublicPage *pubWin = new P00_PublicPage(this);
|
|
|
|
|
|
pubWin->setObjectName("pubWin");
|
|
|
|
|
|
pubWin->setStyleSheet("background-color: transparent;");
|
|
|
|
|
|
|
|
|
|
|
|
ui->LoaderList->addItem("窗口布局->正在共享窗口布局...");
|
|
|
|
|
|
// 获取PublicWin中的scrollArea
|
|
|
|
|
|
QScrollArea *scrollArea = pubWin->findChild<QScrollArea*>("scrollArea");
|
|
|
|
|
|
bool isNewScrollArea = false;
|
|
|
|
|
|
|
|
|
|
|
|
if (!scrollArea) {
|
|
|
|
|
|
// 如果找不到scrollArea,创建新的并添加到PublicWin布局
|
|
|
|
|
|
scrollArea = new QScrollArea(pubWin);
|
|
|
|
|
|
scrollArea->setObjectName("scrollArea");
|
|
|
|
|
|
isNewScrollArea = true;
|
|
|
|
|
|
qDebug() << "创建新的scrollArea";
|
|
|
|
|
|
}
|
|
|
|
|
|
ui->LoaderList->addItem("窗口属性->正在设置窗口属性...");
|
|
|
|
|
|
scrollArea->setStyleSheet("background-color: transparent; border: none;");
|
|
|
|
|
|
// 配置滚动区域属性
|
|
|
|
|
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
|
|
|
|
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
|
|
|
|
scrollArea->setWidgetResizable(false); // 关键:保持内容原始尺寸以实现横向滚动
|
|
|
|
|
|
scrollArea->setStyleSheet("border: none;");
|
|
|
|
|
|
|
|
|
|
|
|
// 创建容器部件 - 用于承载水平排列的窗口
|
|
|
|
|
|
QWidget *container = new QWidget();
|
|
|
|
|
|
container->setObjectName("scrollContainer");
|
|
|
|
|
|
container->setStyleSheet("background-color: transparent;");
|
|
|
|
|
|
// 使用水平布局
|
|
|
|
|
|
QHBoxLayout *hLayout = new QHBoxLayout(container);
|
|
|
|
|
|
hLayout->setSpacing(10); // 窗口之间的间距
|
|
|
|
|
|
hLayout->setContentsMargins(0, 0, 0, 0); // 容器内边距
|
|
|
|
|
|
|
|
|
|
|
|
// 创建并添加子窗口,不设置固定大小
|
|
|
|
|
|
P01_MianPage *p01 = new P01_MianPage (container); ui->LoaderList->addItem("窗口创建->P01_MianPage窗口...");
|
|
|
|
|
|
P02_ShieldPage *p02 = new P02_ShieldPage (container); ui->LoaderList->addItem("窗口创建->P02_ShieldPage窗口...");
|
|
|
|
|
|
P301_PumpPage *p301 = new P301_PumpPage (container); ui->LoaderList->addItem("窗口创建->P301_PumpPage窗口...");
|
|
|
|
|
|
P401_CuttingPage *p401 = new P401_CuttingPage (container); ui->LoaderList->addItem("窗口创建->P401_CuttingPage窗口...");
|
|
|
|
|
|
P501_LoaderPage *p501 = new P501_LoaderPage (container); ui->LoaderList->addItem("窗口创建->P501_LoaderPage窗口...");
|
|
|
|
|
|
P601_TransportPage *p601 = new P601_TransportPage (container); ui->LoaderList->addItem("窗口创建->P601_TransportPage窗口...");
|
|
|
|
|
|
P07_CylinderPage *p07 = new P07_CylinderPage (container); ui->LoaderList->addItem("窗口创建->P07_CylinderPage窗口...");
|
|
|
|
|
|
P08_AlarmPage *p08 = new P08_AlarmPage (container); ui->LoaderList->addItem("窗口创建->P08_AlarmPage窗口...");
|
|
|
|
|
|
P09_RemotePage *p09 = new P09_RemotePage (container); ui->LoaderList->addItem("窗口创建->P09_RemotePage窗口...");
|
|
|
|
|
|
P10_IntelligentPage *p10 = new P10_IntelligentPage (container); ui->LoaderList->addItem("窗口创建->P10_IntelligentPage窗口...");
|
|
|
|
|
|
P11_IsolationPage *p11 = new P11_IsolationPage (container); ui->LoaderList->addItem("窗口创建->P11_IsolationPage窗口...");
|
|
|
|
|
|
P12_NetworkPage *p12 = new P12_NetworkPage (container); ui->LoaderList->addItem("窗口创建->P12_NetworkPage窗口...");
|
|
|
|
|
|
P13_InsPage *p13 = new P13_InsPage (container); ui->LoaderList->addItem("窗口创建->P13_InsPage窗口...");
|
|
|
|
|
|
P14_AtlasPage *p14 = new P14_AtlasPage (container); ui->LoaderList->addItem("窗口创建->P14_AtlasPage窗口...");
|
|
|
|
|
|
P15_ParameterPage *p15 = new P15_ParameterPage (container); ui->LoaderList->addItem("窗口创建->P15_ParameterPage窗口...");
|
|
|
|
|
|
P16_SettingPage *p16 = new P16_SettingPage (container); ui->LoaderList->addItem("窗口创建->P16_SettingPage窗口...");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 让子窗口使用自身的首选大小
|
|
|
|
|
|
p01->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p02->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p301->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p401->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p501->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p601->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p07->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p08->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p09->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p10->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p11->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p12->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p13->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p14->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p15->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
p16->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
|
|
|
|
|
|
|
|
|
|
|
hLayout->addWidget(p01); ui->LoaderList->addItem("窗口载入布局->P01_MianPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p02); ui->LoaderList->addItem("窗口载入布局->P02_ShieldPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p301); ui->LoaderList->addItem("窗口载入布局->P301_PumpPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p401); ui->LoaderList->addItem("窗口载入布局->P401_CuttingPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p501); ui->LoaderList->addItem("窗口载入布局->P501_LoaderPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p601); ui->LoaderList->addItem("窗口载入布局->P601_TransportPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p07); ui->LoaderList->addItem("窗口载入布局->P07_CylinderPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p08); ui->LoaderList->addItem("窗口载入布局->P08_AlarmPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p09); ui->LoaderList->addItem("窗口载入布局->P09_RemotePage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p10); ui->LoaderList->addItem("窗口载入布局->P10_IntelligentPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p11); ui->LoaderList->addItem("窗口载入布局->P11_IsolationPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p12); ui->LoaderList->addItem("窗口载入布局->P12_NetworkPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p13); ui->LoaderList->addItem("窗口载入布局->P13_InsPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p14); ui->LoaderList->addItem("窗口载入布局->P14_AtlasPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p15); ui->LoaderList->addItem("窗口载入布局->P15_ParameterPage 窗口...");
|
|
|
|
|
|
hLayout->addWidget(p16); ui->LoaderList->addItem("窗口载入布局->P16_SettingPage 窗口...");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 隐藏滚动条(如果需要)
|
|
|
|
|
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 水平滚动条按需显示
|
|
|
|
|
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏垂直滚动条
|
|
|
|
|
|
// 设置滚动区域的内容部件
|
|
|
|
|
|
scrollArea->setWidget(container);
|
|
|
|
|
|
qDebug()<<p301->size();
|
|
|
|
|
|
// 确保scrollArea被正确添加到PublicWin中
|
|
|
|
|
|
if (isNewScrollArea) {
|
|
|
|
|
|
// 为PublicWin设置布局(如果没有)
|
|
|
|
|
|
if (!pubWin->layout()) {
|
|
|
|
|
|
QVBoxLayout *mainLayout = new QVBoxLayout(pubWin);
|
|
|
|
|
|
mainLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
pubWin->setLayout(mainLayout);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 将滚动区域添加到布局
|
|
|
|
|
|
pubWin->layout()->addWidget(scrollArea);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 显示主窗口
|
|
|
|
|
|
pubWin->show();
|
|
|
|
|
|
ui->LoaderList->clear();
|
2025-08-20 23:06:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
void LaunchPage::WinInit(){
|
2025-09-28 17:14:34 +08:00
|
|
|
|
//ui->LoaderList->addItem("读取配置->")
|
|
|
|
|
|
PumpConditionConfigFile = ConfigFiles().ReadFile_Csv("./ProgramConfig/UI_油泵界面启停条件_配置.csv");
|
2025-09-15 22:28:43 +08:00
|
|
|
|
QList<QStringList> FileData = ConfigFiles().ReadFile_Csv("./ProgramConfig/UI_报警内容文本_配置.csv");
|
|
|
|
|
|
for (int row = 1; row < FileData.size()-1; ++row)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool ok1,ok2;
|
|
|
|
|
|
uint8_t Dev = FileData.at(row)[0].toUInt(&ok1, 16);
|
|
|
|
|
|
uint8_t Index = FileData.at(row)[1].toUInt(&ok2, 16);
|
|
|
|
|
|
//qDebug()<<Dev<<Index;
|
|
|
|
|
|
AlarmText[Dev][Index].TextColor = FileData.at(row)[2];
|
|
|
|
|
|
AlarmText[Dev][Index].AlarmText = FileData.at(row)[3] + "->" + FileData.at(row)[4];
|
|
|
|
|
|
AlarmText[Dev][Index].Troubleshoot = FileData.at(row)[5];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
gPageName["P01"] = "主预览";
|
|
|
|
|
|
gPageName["P02"] = "屏蔽条件";
|
|
|
|
|
|
gPageName["P301"] = "油泵设备";
|
|
|
|
|
|
gPageName["P401"] = "截割设备";
|
|
|
|
|
|
gPageName["P501"] = "装载设备";
|
|
|
|
|
|
gPageName["P601"] = "运输设备";
|
|
|
|
|
|
gPageName["P07"] = "备用设备";
|
|
|
|
|
|
gPageName["P08"] = "故障记录";
|
|
|
|
|
|
gPageName["P09"] = "遥控测试";
|
|
|
|
|
|
gPageName["P10"] = "自动智能";
|
|
|
|
|
|
gPageName["P11"] = "绝缘检测";
|
|
|
|
|
|
gPageName["P12.00"] = "网络拓扑";
|
|
|
|
|
|
gPageName["P12.01"] = "硬件IO 1";
|
|
|
|
|
|
gPageName["P12.02"] = "硬件IO 2";
|
|
|
|
|
|
gPageName["P12.03"] = "硬件IO 3";
|
|
|
|
|
|
gPageName["P12.04"] = "硬件IO 4";
|
|
|
|
|
|
gPageName["P12.05"] = "硬件IO 3";
|
|
|
|
|
|
gPageName["P12.06"] = "操作箱 1";
|
|
|
|
|
|
gPageName["P12.07"] = "操作箱 2";
|
|
|
|
|
|
gPageName["P12.08"] = "操作箱 3";
|
|
|
|
|
|
gPageName["P12.09"] = "操作箱 4";
|
|
|
|
|
|
gPageName["P13"] = "本地控制";
|
|
|
|
|
|
gPageName["P14"] = "随机图册";
|
|
|
|
|
|
gPageName["P15"] = "参数设置";
|
|
|
|
|
|
gPageName["P16"] = "系统设置";
|
|
|
|
|
|
|
|
|
|
|
|
gPageIndexStr = "P01";
|
|
|
|
|
|
|
|
|
|
|
|
// 创建实例(建议全局唯一)
|
|
|
|
|
|
ttsManager = new TTSManager(this);
|
2025-08-20 23:06:28 +08:00
|
|
|
|
}
|