JonYang před 1 dnem
rodič
revize
d1336a0a5c

+ 0 - 30
View/die-bonder-ui/MainWnd.cpp

@@ -846,10 +846,8 @@ void MainWnd::Init()
 {
     m_sqlOper = &SqlOperation::GetInstance();
     m_sqlOper->LoadSql();
-
     m_pCameraBind = new CameraBind;
 
-
     int themeValue = gen_if.getThemeValue();
     QSettings settings("YourCompany", "YourApplication_style");
     applyTheme(themeValue);
@@ -865,39 +863,11 @@ void MainWnd::Init()
         //setChineseMode(this);
         translator.load(":/Src/Res/Translate/SBT_zh_CN.qm");
         qApp->installTranslator(&translator);
-        
     }
 
-
     ShowOriginalWndSlots();
-
-    bool buttonConnected = connect(ui->tabHomeBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabHomeBtn_clicked);
-    qDebug() << "Connected tabHomeBtn clicked to on_tabHomeBtn_clicked:" << buttonConnected;
-
-    connect(ui->tabProductionBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabProductionBtn_clicked);
-
-    connect(ui->tabDiagnosisBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabDiagnosisBtn_clicked);
-
-    connect(ui->tabDispositionBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabDispositionBtn_clicked);
-
-    connect(ui->tabModuleBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabModuleBtn_clicked);
-
-    // connect(ui->tabSystemBtn, &QPushButton::clicked,
-    //         this, &MainWnd::on_tabSystemBtn_clicked);
-
-    connect(ui->tabProgramBtn, &QPushButton::clicked,
-        this, &MainWnd::on_tabProgramBtn_clicked);
-
-    JLogAllOutput::cmd_debug("OriginalWnd 已设置为 stackedWidget 的当前页面");
 }
 
-
-
 void MainWnd::on_pushButton_clicked()
 {
     //加确认关闭提示确认窗口

+ 92 - 150
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.cpp

@@ -207,12 +207,13 @@ bool DbTreeViewManager::hasPrivilege(const int &UserGrade, const int &userPrivil
 
 void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
 {
-    //DelMemoryWnd(m_pProgrammPage);
-    //DelMemoryWnd(m_pDiagnosisPage);
-    //m_thirdLevelFieldWnd = nullptr; //TODO: 释放为啥不为空?
+    DelMemoryWnd(m_pProgrammPage);
+    DelMemoryWnd(m_pDiagnosisPage);
+    DelMemoryWnd(m_thirdLevelFieldWnd);
+ 
 
+    PromptSaveChanges();
 
-    promptSaveChanges();
     QString strLog = "Initializing tree with configId:";
     strLog += name;
     strLog += "and userPrivilege:";
@@ -241,26 +242,7 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
     // **Home 界面逻辑**
     if (name == "Home")
     {
-        // 隐藏目录树和分隔线
-        m_pTreeViewDown->hide();
-        for (auto separator : m_mapFirstLevelSeparators)
-        {
-            if (separator)
-            {
-                separator->hide();
-            }
-        }
-        // 隐藏导航栏
-        m_pNavigationWidget->hide();
-
-        // 隐藏按钮
-        updateButtonsVisibility(); // 将按钮隐藏
-
-        // 隐藏特定的分隔线 lineFrame1
-        if (m_pLineFrame1)
-        {
-            m_pLineFrame1->hide();
-        }
+        CustomizeWndCall(nullptr, false);
 
         // 从 BondHead 和 Buttons 表中加载 DirectoryId = 1 的数据
         QList<ST_TABLE_CONTROL_DATA> tableControlDatas;
@@ -277,124 +259,26 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
         st.multiTableName = "HomeProduct";
 
         m_backStack.append(st);
-        if (m_backStack.size() >= 2) {
+        if (m_backStack.size() >= 2) 
+        {
             buttonLeft->setIcon(QIcon(":/images/home_left.png"));
         }
 
     }
     else if (name == "Programme")
     {
-        // 隐藏目录树和分隔线
-        m_pTreeViewDown->hide();
-        for (auto separator : m_mapFirstLevelSeparators)
-        {
-            if (separator)
-            {
-                separator->hide();
-            }
-        }
-        // 隐藏导航栏
-        m_pNavigationWidget->hide();
-
-        // 隐藏按钮
-        updateButtonsVisibility(); // 将按钮隐藏
-
-        // 隐藏特定的分隔线 lineFrame1
-        if (m_pLineFrame1)
-        {
-            m_pLineFrame1->hide();
-        }
-        // 若已有第三层窗口,先关闭并释放
-        if (m_thirdLevelFieldWnd)
-        {
-            m_thirdLevelFieldWnd->close();
-            m_thirdLevelFieldWnd->deleteLater();
-            m_thirdLevelFieldWnd = nullptr;
-        }
-
-        // 清理之前的控件列表
-        m_fieldWidgets.clear();
-
-        // 创建新的 "字段展示" 窗口,并赋值给 m_thirdLevelFieldWnd
-        m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
-        m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
-        m_thirdLevelFieldWnd->setWindowTitle("字段展示");
-        m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
-
-        // 填满 widget2
-        m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
-
         m_pProgrammPage = new ProgrammPage();
-
-        QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
-        mainLayout->setContentsMargins(0, 0, 0, 0);
-        mainLayout->addWidget(m_pProgrammPage);
-
-        m_thirdLevelFieldWnd->setLayout(mainLayout);
-
-        m_thirdLevelFieldWnd->show();
+        CustomizeWndCall(m_pProgrammPage);
 
     }
-    //else if (name == "Diagnosis")
-    //{
-    //    // 不沿用下面的页面,自己管理一个页面
-    //            // 隐藏目录树和分隔线
-    //    for (auto separator : m_mapFirstLevelSeparators)
-    //    {
-    //        if (separator)
-    //        {
-    //            separator->hide();
-    //        }
-    //    }
-    //    // 隐藏导航栏
-    //    m_pNavigationWidget->hide();
-
-    //    // 隐藏按钮
-    //    updateButtonsVisibility(); // 将按钮隐藏
-
-    //    // 隐藏特定的分隔线 lineFrame1
-    //    if (m_pLineFrame1)
-    //    {
-    //        m_pLineFrame1->hide();
-    //    }
-    //    // 若已有第三层窗口,先关闭并释放
-    //    if (m_thirdLevelFieldWnd)
-    //    {
-    //        m_thirdLevelFieldWnd->close();
-    //        m_thirdLevelFieldWnd->deleteLater();
-    //        m_thirdLevelFieldWnd = nullptr;
-    //    }
-
-    //    // 清理之前的控件列表
-    //    m_fieldWidgets.clear();
-
-    //    // 创建新的 "字段展示" 窗口,并赋值给 m_thirdLevelFieldWnd
-    //    m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
-    //    m_thirdLevelFieldWnd->setWindowTitle("字段展示");
-    //    m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
-    //    m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
-
-    //    // 填满 widget2
-    //    m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
-    //    m_pDiagnosisPage = new DiagnosisPage(m_thirdLevelFieldWnd);
-
-    //    QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
-    //    mainLayout->setContentsMargins(0, 0, 0, 0);
-    //    mainLayout->addWidget(m_pDiagnosisPage);
-
-    //    m_thirdLevelFieldWnd->setLayout(mainLayout);
-
-    //    m_thirdLevelFieldWnd->show();
-    //}
+    else if (name == "Diagnosis")
+    {
+        m_pDiagnosisPage = new DiagnosisPage();
+        CustomizeWndCall(m_pDiagnosisPage);
+    }
     else 
     {
-        // 若已有第三层窗口,先关闭并释放
-        if (m_thirdLevelFieldWnd)
-        {
-            DelMemoryWnd(m_thirdLevelFieldWnd);
-        }
-
-        // **其他配置逻辑**
+        // **其他配置逻辑** TODO:后面在封装
         // 设置 treeViewDown 的几何位置
         m_pTreeViewDown->setGeometry(16, 106, m_pOriginalWndMenuPage->width() - 16, m_pOriginalWndMenuPage->height() - 106);
         // 显示目录树和分隔线
@@ -571,6 +455,51 @@ void DbTreeViewManager::initializeTree(QString name, const int &userPrivilege)
     }
 }
 
+void DbTreeViewManager::CustomizeWndCall(QWidget* pWnd, bool isAdd /*= true*/)
+{
+    // 隐藏目录树和分隔线
+    m_pTreeViewDown->hide();
+    for (auto separator : m_mapFirstLevelSeparators)
+    {
+        if (separator)
+        {
+            separator->hide();
+        }
+    }
+    // 隐藏导航栏
+    m_pNavigationWidget->hide();
+
+    // 隐藏按钮
+    updateButtonsVisibility();
+
+    // 隐藏特定的分隔线 lineFrame1
+    if (m_pLineFrame1)
+    {
+        m_pLineFrame1->hide();
+    }
+
+    if (isAdd)
+    {
+        // 清理之前的控件列表
+        m_fieldWidgets.clear();
+
+        m_thirdLevelFieldWnd = new QWidget(m_pOriginalWndMenuPage);
+        m_thirdLevelFieldWnd->setAttribute(Qt::WA_DeleteOnClose);
+        m_thirdLevelFieldWnd->setWindowTitle(m_strShowName);
+        m_thirdLevelFieldWnd->setStyleSheet("background-color: transparent;");
+
+        m_thirdLevelFieldWnd->setGeometry(0, 0, m_pOriginalWndMenuPage->width(), m_pOriginalWndMenuPage->height());
+
+        QVBoxLayout* mainLayout = new QVBoxLayout(m_thirdLevelFieldWnd);
+        mainLayout->setContentsMargins(0, 0, 0, 0);
+        mainLayout->addWidget(pWnd);
+
+        m_thirdLevelFieldWnd->setLayout(mainLayout);
+
+        m_thirdLevelFieldWnd->show();
+    }
+}
+
 // 从数据库加载目录  包含权限判断
 void DbTreeViewManager::loadDirectories(int configId, const int &userPrivilege)
 {
@@ -1449,8 +1378,10 @@ void DbTreeViewManager::clearAllSeparators()
 {
     // 遍历 m_mapFirstLevelSeparators 中所有 QFrame,
     // 隐藏后调用 deleteLater()
-    for (auto separator : m_mapFirstLevelSeparators.values()) {
-        if(separator) {
+    for (auto separator : m_mapFirstLevelSeparators.values())
+    {
+        if(separator)
+        {
             separator->hide();
             separator->deleteLater();
         }
@@ -1459,41 +1390,52 @@ void DbTreeViewManager::clearAllSeparators()
     m_mapFirstLevelSeparators.clear();
 }
 
-
-
 void DbTreeViewManager::updateSeparatorLine()
 {
     // 如果目录树被隐藏,就把分割线都藏起来
-    if (!m_pTreeViewDown->isVisible()) {
-        for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it) {
+    if (!m_pTreeViewDown->isVisible()) 
+    {
+        for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it) 
+        {
             QFrame *sep = it.value();
-            if (sep) sep->hide();
+            if (sep)
+            {
+                sep->hide();
+            }
         }
         return;
     }
 
     // 遍历所有“一级目录”与其分隔线
-    for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it) {
+    for (auto it = m_mapFirstLevelSeparators.begin(); it != m_mapFirstLevelSeparators.end(); ++it)
+    {
         QStandardItem *firstLevelItem = it.key();
         QFrame *separator = it.value();
-        if (!firstLevelItem || !separator) continue;
+        if (!firstLevelItem || !separator)
+        {
+            continue;
+        }
 
         // 拿到可视区域
         QModelIndex firstLevelIndex = m_pCModel->indexFromItem(firstLevelItem);
         QRect firstLevelRect = m_pTreeViewDown->visualRect(firstLevelIndex);
 
         // 如果这个一级目录滚动到看不见了,就把分割线也藏起来
-        if (!firstLevelRect.isValid()) {
+        if (!firstLevelRect.isValid()) 
+        {
             separator->hide();
             continue;
         }
 
         // 如果展开并且它有子节点,就找“最后一个可见子项”
-        if (m_pTreeViewDown->isExpanded(firstLevelIndex) && firstLevelItem->hasChildren()) {
+        if (m_pTreeViewDown->isExpanded(firstLevelIndex) && firstLevelItem->hasChildren()) 
+        {
             QModelIndex lastVisibleChild = findLastVisibleChild(firstLevelIndex);
-            if (lastVisibleChild.isValid()) {
+            if (lastVisibleChild.isValid()) 
+            {
                 QRect lastChildRect = m_pTreeViewDown->visualRect(lastVisibleChild);
-                if (lastChildRect.isValid()) {
+                if (lastChildRect.isValid()) 
+                {
                     // 将分割线放在最后一个子项下面
                     separator->setGeometry(16,lastChildRect.bottom() + 115, m_pOriginalWndMenuPage->width() - 40,1);
                     separator->show();
@@ -3112,7 +3054,7 @@ void DbTreeViewManager::updateParentCheckState(QStandardItem *item)
 
 void DbTreeViewManager::onButtonBackClicked()
 {
-    promptSaveChanges();
+    PromptSaveChanges();
     if (m_thirdLevelFieldWnd) {
         // 当前在第三层目录,返回到上一层目录
         //qDebug() << "当前在第三层目录,准备返回上一层。";
@@ -3340,7 +3282,7 @@ QList<QStandardItem*> DbTreeViewManager::collectAllThirdLevelItems()
 
 void DbTreeViewManager::onButtonDownClicked()
 {
-    promptSaveChanges();
+    PromptSaveChanges();
     // 1) 收集所有 第三层 节点
     QList<QStandardItem*> thirdLevelList = collectAllThirdLevelItems();
     if (thirdLevelList.isEmpty()) {
@@ -3424,7 +3366,7 @@ void DbTreeViewManager::onButtonDownClicked()
 
 void DbTreeViewManager::onButtonUpClicked()
 {
-    promptSaveChanges();
+    PromptSaveChanges();
     // 1) 收集所有 第三层 节点
     QList<QStandardItem*> thirdLevelList = collectAllThirdLevelItems();
     if (thirdLevelList.isEmpty()) {
@@ -3504,7 +3446,7 @@ void DbTreeViewManager::onButtonUpClicked()
 
 void DbTreeViewManager::onButtonRightClicked()
 {
-    promptSaveChanges();
+    PromptSaveChanges();
     if (m_forwardStack.isEmpty()) {
         //qDebug() << "[Forward] 已经没有可以前进的页面";
         buttonRight->setIcon(QIcon(":/images/home_right.png"));
@@ -3527,7 +3469,7 @@ void DbTreeViewManager::onButtonRightClicked()
 
 void DbTreeViewManager::onButtonLeftClicked()
 {
-    promptSaveChanges();
+    PromptSaveChanges();
     if (m_backStack.size() < 2) {
         //qDebug() << "[Back] 已经无法再后退";
         buttonLeft->setIcon(QIcon(":/images/home_left_hide.png"));
@@ -4185,7 +4127,7 @@ void DbTreeViewManager::DelMemoryWnd(QWidget* pWid)
     }
 }
 
-void DbTreeViewManager::promptSaveChanges() 
+void DbTreeViewManager::PromptSaveChanges() 
 {
     if (!modifiedLabels.isEmpty()) 
     {

+ 10 - 5
View/die-bonder-ui/OriginalWnd/DbTreeViewManager.h

@@ -40,6 +40,11 @@ public:
      */
     void initializeTree(QString name, const int &userPrivilege);
 
+    /**自定义窗口
+    * @isAdd 添加窗口
+     */
+    void CustomizeWndCall(QWidget* pWnd, bool isAdd = true);
+
     /**
      * @brief 清理所有分隔线(内部调用,用于清除旧有的一级目录分隔线等)
      */
@@ -89,7 +94,7 @@ public:
     void loadpage(const int& configId);
     QList<QStandardItem*> thirdLevelListtest;
     QStandardItem* deepCopyItem(const QStandardItem* item);
-    void promptSaveChanges();
+    void PromptSaveChanges();
 signals:
     void RunFunSignals(ns_module::ST_BUTTON_FUN pra);
     void saveClicked();
@@ -155,11 +160,11 @@ private:
 private:
     /** 编程界面
     */
-    ProgrammPage* m_pProgrammPage = nullptr;
+    QPointer<ProgrammPage>  m_pProgrammPage;
 
     /**诊断页面
      */
-    DiagnosisPage* m_pDiagnosisPage = nullptr;
+    QPointer<DiagnosisPage> m_pDiagnosisPage;
 
     /**OriginalWnd 窗口
      */
@@ -182,12 +187,12 @@ private:
     /**
      * @brief 树状模型,用于存放目录层级
      */
-    QPointer<QStandardItemModel> m_pCModel = nullptr;
+    QPointer<QStandardItemModel> m_pCModel;
 
     /**
      * @brief 用于存储第三层字段展示窗口的指针(单实例)
      */
-    QWidget* m_thirdLevelFieldWnd = nullptr;
+    QPointer<QWidget> m_thirdLevelFieldWnd;
 
     /**
      * @brief 上部的几个操作按钮(例如 “返回”、“上”、“下”、“左”、“右”)