Procházet zdrojové kódy

V1.5
1、修改完成了所有的bug

Apple před 2 týdny
rodič
revize
c4a137d928

+ 81 - 38
TransmitterSwitch/CopyToOther/copytoother.cpp

@@ -9,7 +9,7 @@
 #include <QMouseEvent>
 #include <QCheckBox>
 #include <QVBoxLayout>
-#include <qcheckbox.h>
+#include <tipwidget.h>
 
 #include "warning/warning.h"
 #include "LHQLogAPI.h"
@@ -41,16 +41,19 @@ CopyToOther::CopyToOther(QWidget *parent) :
     m_layout->setContentsMargins(0, 0, 0, 0);
     m_layout->setSpacing(0);
     ui->scrollAreaWidgetContents->setLayout(m_layout);
-    /* 添加一个竖直弹簧 */
-    auto pSpacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
-    m_layout->addItem(pSpacerItem);
+    /* 使用空白的Widget替代弹簧 */
+    // auto pSpacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
+    QWidget* spacerWidget = new QWidget(this);
+    spacerWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
+    spacerWidget->setObjectName("widget_spacer");
+    m_layout->addWidget(spacerWidget);
 
 
     connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
     connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close()));
     connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
 
-    connect(ui->checkBox_list, &QCheckBox::stateChanged, this, &CopyToOther::do_checkBox_stateChanged);
+    connect(ui->checkBox_list, &QCheckBox::stateChanged, this, &CopyToOther::do_checkBox_list_stateChanged);
 
     /* 注册事件过滤器 */
     ui->pBtn_close->installEventFilter(this);
@@ -95,6 +98,13 @@ void CopyToOther::do_ok()
             m_listChannel.append(info);
         }
     }
+    /* 判断有没有勾选 */
+    if(m_listChannel.isEmpty())
+    {
+        // LH_WRITE_ERROR("没有选择频率");
+        TipWidget::display(TipWidget::OPERATOR_WARN, "请选择一个频率", this);
+        return;
+    }
 
 
     m_isOk = true;
@@ -102,7 +112,43 @@ void CopyToOther::do_ok()
     this->close();
 }
 
-/* 点击了一个checkBox,取消其他同频率的checkBox */
+/* 点击了全选按钮 */
+void CopyToOther::do_checkBox_list_stateChanged(int state)
+{
+    auto checkBox = qobject_cast<QCheckBox*>(sender());
+    if(checkBox == nullptr)
+    {
+        return;
+    }
+    // LH_WRITE_LOG_DEBUG(QString("全选状态:%1").arg(state));
+    Qt::CheckState checkState = Qt::Unchecked;
+    /* 判断是全选还是取消全选 */
+    if(state == Qt::Checked)
+    {
+        checkState = Qt::Checked;
+    
+    }
+    else if(state == Qt::Unchecked)
+    {
+        checkState = Qt::Unchecked;
+    }
+    else if(state == Qt::PartiallyChecked)
+    {
+        /* 部分选中,设置为全选 */
+        ui->checkBox_list->blockSignals(true);
+        ui->checkBox_list->setCheckState(Qt::Checked);
+        ui->checkBox_list->blockSignals(false);
+        checkState = Qt::Checked;
+    }
+    for(auto it : m_listCheckBox)
+    {
+        it->blockSignals(true);
+        it->setCheckState(checkState);
+        it->blockSignals(false);
+    }
+}
+
+/* 点击了一个checkBox */
 void CopyToOther::do_checkBox_stateChanged(int state)
 {
     auto checkBox = qobject_cast<QCheckBox*>(sender());
@@ -110,25 +156,34 @@ void CopyToOther::do_checkBox_stateChanged(int state)
     {
         return;
     }
-    /* 先判断是不是全选 */
-    if(checkBox == ui->checkBox_list)
+    // LH_WRITE_LOG_DEBUG(QString("单个checkBox状态:%1").arg(state));
+    /* 不是点击了全选,改变全选的状态 */
+    bool isAllChecked = true;
+    bool isAllUnchecked = true;
+    for(auto it : m_listCheckBox)
     {
-        /* 判断是全选还是取消全选 */
-        if(state == Qt::Checked)
+        if(it->checkState() == Qt::Checked)
         {
-            for(auto it : m_listCheckBox)
-            {
-                it->setChecked(true);
-            }
-        }else {
-            for(auto it : m_listCheckBox)
-            {
-                it->setChecked(false);
-            }
+            isAllUnchecked = false;
+        }
+        else if(it->checkState() == Qt::Unchecked)
+        {
+            isAllChecked = false;
         }
-        return;
     }
-
+    Qt::CheckState checkState = Qt::Unchecked;
+    if(isAllChecked)
+    {
+        checkState = Qt::Checked;
+    }else if(isAllUnchecked)
+    {
+        checkState = Qt::Unchecked;
+    }else {
+        checkState = Qt::PartiallyChecked;
+    }
+    ui->checkBox_list->blockSignals(true);
+    ui->checkBox_list->setCheckState(checkState);
+    ui->checkBox_list->blockSignals(false);
 }
 
 /* 显示事件 */
@@ -149,8 +204,8 @@ void CopyToOther::setQSSPath(const QString& qssPath)
     QFile file(qssFile);
     if(file.open(QFile::ReadOnly))
     {
-        QString styleSheet = file.readAll();
-        this->setStyleSheet(styleSheet);
+        m_qss = file.readAll();
+        this->setStyleSheet(m_qss);
         file.close();
     }else 
     {
@@ -168,22 +223,10 @@ void CopyToOther::createRow(const ChannelInfo& info)
     checkBox->setText(info.ChannelName);
     checkBox->setProperty(m_propertyChnID.c_str(), info.ChannelID);
     checkBox->setMinimumHeight(34);
-    checkBox->setStyleSheet(R"(
-        QCheckBox
-        {
-            background: #464649;
-
-            font-weight: 400;
-            font-size: 14px;
-            color: #B1B3B4;
-            text-align: left;
-            font-style: normal;
-            text-transform: none;
-
-            padding-left: 16px;
-        })"
-    );
+    /* 设置只有两种状态 */
+    checkBox->setTristate(false);
     connect(checkBox, &QCheckBox::stateChanged, this, &CopyToOther::do_checkBox_stateChanged);
+    checkBox->setStyleSheet(m_qss);
     /* 插入到最后一个弹簧之前 */
     m_layout->insertWidget(m_layout->count() - 1, checkBox);
     /* 添加到列表中 */

+ 4 - 1
TransmitterSwitch/CopyToOther/copytoother.h

@@ -43,7 +43,9 @@ private:
 
 private slots:
     void do_ok();
-    /* 点击了一个checkBox,取消其他同频率的checkBox */
+    /* 点击了全选按钮 */
+    void do_checkBox_list_stateChanged(int state);
+    /* 点击了一个checkBox */
     void do_checkBox_stateChanged(int state);
 
 protected:
@@ -61,6 +63,7 @@ protected:
 private:
     Ui::CopyToOther *ui;
 
+    QString m_qss;                                      /* 样式表 */
     QVBoxLayout* m_layout = nullptr;                    /* 垂直布局 */
     bool m_isOk = false;                                /* 是否点下了OK */
     QString m_templateName;                             /* 模版名称 */

binární
TransmitterSwitch/Resource/ICON/CheckBox_Checked.png


binární
TransmitterSwitch/Resource/ICON/CheckBox_PartiallyChecked.png


binární
TransmitterSwitch/Resource/ICON/CheckBox_UnChecked.png


+ 37 - 5
TransmitterSwitch/Resource/QSS/dark/copytoother.qss

@@ -129,9 +129,9 @@ QCheckBox#checkBox_list
     border: 1px solid rgba(255,255,255,0.15);
 }
 
-QCheckBox#checkBox
+QCheckBox
 {
-    background: transparent;
+    background: #464649;
 
     font-weight: 400;
     font-size: 14px;
@@ -143,12 +143,42 @@ QCheckBox#checkBox
     padding-left: 16px;
 }
 
+QCheckBox::indicator 
+{
+    width: 18px; /* 勾选框的宽度 */
+    height: 18px; /* 勾选框的高度 */
+    border: 0px solid #B3C0E7; /* 勾选框的边框颜色和宽度 */
+    background: transparent; /* 勾选框的背景颜色 */
+    border-radius: 2px; /* 可选:设置圆角 */
+}
+
+QCheckBox::indicator:unchecked 
+{
+    background: transparent; /* 未选中状态的背景颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_UnChecked.png); /* 未选中状态的图标 */
+}
+
+/* 半选中 */
+QCheckBox::indicator:indeterminate
+{
+    background: transparent; /* 未选中状态的背景颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_PartiallyChecked.png); /* 未选中状态的图标 */
+}
+
+QCheckBox::indicator:checked 
+{
+    background: transparent;            /* 选中状态的背景颜色 */
+    border: 0px solid #438EFF;      /* 选中状态的边框颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_Checked.png); /* 选中状态的图标 */
+}
+
+
 /*===============================================================
  * QScrollBar 滚动条
  ================================================================*/
 QScrollArea
 {
-	background: #464649;
+	background: transparent;
 	border-top-left-radius: 0px;
     border-top-right-radius: 0px;
     border-bottom-left-radius: 4px;
@@ -159,11 +189,13 @@ QScrollArea
     border-bottom: 1px solid rgba(255,255,255,0.15);
 }
 
-QWidget#scrollArea
+/* 这里必须设置颜色,不然会显示灰白色 */
+QWidget#widget_spacer
 {
-    background: transparent;
+    background: #464649;
 }
 
+
 QScrollBar:horizontal, QScrollBar:vertical
 {
     border:none;

+ 44 - 6
TransmitterSwitch/Resource/QSS/dark/importtemplate.qss

@@ -150,11 +150,49 @@ QTableWidget::item:selected
     background: #438EFF;
 }
 
-/* QCheckBox::indicator
+/* ==========================================================
+ *  QCheckBox
+ * ========================================================== */
+
+QCheckBox
 {
-    width: 16px;
-    height: 16px;
-    border-radius: 4px;
-    background: #B3C0E7;
-} */
+    background: transparent;
+
+    font-weight: 400;
+    font-size: 14px;
+    color: #B1B3B4;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+
+    /* padding-left: 16px; */
+}
 
+QCheckBox::indicator 
+{
+    width: 20px; /* 勾选框的宽度 */
+    height: 20px; /* 勾选框的高度 */
+    border: 0px solid #B3C0E7; /* 勾选框的边框颜色和宽度 */
+    background: transparent; /* 勾选框的背景颜色 */
+    border-radius: 2px; /* 可选:设置圆角 */
+}
+
+QCheckBox::indicator:unchecked 
+{
+    background: transparent; /* 未选中状态的背景颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_UnChecked.png); /* 未选中状态的图标 */
+}
+
+/* 半选中 */
+QCheckBox::indicator:indeterminate
+{
+    background: transparent; /* 未选中状态的背景颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_PartiallyChecked.png); /* 未选中状态的图标 */
+}
+
+QCheckBox::indicator:checked 
+{
+    background: transparent;            /* 选中状态的背景颜色 */
+    border: 0px solid #438EFF;      /* 选中状态的边框颜色 */
+    border-image: url(:/ICON/ICON/CheckBox_Checked.png); /* 选中状态的图标 */
+}

+ 11 - 5
TransmitterSwitch/Resource/QSS/dark/savetotemplate.qss

@@ -1,13 +1,10 @@
 QWidget
-{
-    background: transparent;
-    
+{    
     font-size: 14px;
     color: #D2D2D2;
     line-height: 21px;
     text-align: left;
     font-style: normal;
-    background: transparent;
 }
 
 QWidget#widget
@@ -105,11 +102,14 @@ QPushButton#pBtn_ok:hover
 QLineEdit
 {
     background: transparent;
+    color: #EBEBEB;
     border-radius: 4px;
     padding-left:12px;
 	border: 1px solid rgba(255,255,255,0.15);
 }
 
+
+
 QLineEdit:hover
 {
     border: 1px solid #438EFF;
@@ -127,4 +127,10 @@ QLineEdit:!enabled/* 或者disable */
     border: 1px solid #E6E9F4;
 }
 
-
+QLineEdit[placeholderText ]
+{
+    /* 占位符文本的颜色 */
+    color: #EBEBEB;
+    /* 可选:设置占位符为斜体 */
+    /* font-style: italic; */
+}

+ 15 - 1
TransmitterSwitch/Resource/QSS/dark/templatemanager.qss

@@ -157,7 +157,21 @@ QTableWidget::item:selected
     background: #438EFF;
 }
 
-/* QTableWidget::item:selected:focus
+QLineEdit
+{
+    color: #1e1c1c;
+    background: #FFFFFF;
+    border-radius: 4px;
+    /* border: 1px solid #438EFF; */
+}
+
+/* QTableWidget::item:editable
+{
+    color: #464649;
+    background: #438EFF;
+}
+
+QTableWidget::item:focus
 {
     color: #464649;
     background: #438EFF;

+ 3 - 0
TransmitterSwitch/Resource/TransSwitch.qrc

@@ -55,6 +55,9 @@
         <file>ICON/Close_pass.png</file>
         <file>ICON/space_dark.png</file>
         <file>ICON/space_light.png</file>
+        <file>ICON/CheckBox_Checked.png</file>
+        <file>ICON/CheckBox_PartiallyChecked.png</file>
+        <file>ICON/CheckBox_UnChecked.png</file>
     </qresource>
     <qresource prefix="/Font">
         <!-- <file>font/SiYuanBlack_ttf/SiYuanBlack_Bold.ttf</file>

+ 1 - 1
TransmitterSwitch/Template/importtemplate.cpp

@@ -138,7 +138,7 @@ void ImportTemplate::do_checkBox_stateChanged(int state)
 void ImportTemplate::showEvent(QShowEvent *event)
 {
     /* 设置列宽度 */
-    int width = (ui->tableWidget->width() - 88 - 14) / 2;
+    int width = (ui->tableWidget->width() - 88 - 16) / 2;
     ui->tableWidget->setColumnWidth(0, width);
     ui->tableWidget->setColumnWidth(1, width);
     ui->tableWidget->setColumnWidth(2, 88);

+ 52 - 1
TransmitterSwitch/Template/savetotemplate.cpp

@@ -28,6 +28,11 @@ SaveToTemplate::SaveToTemplate(QWidget *parent) :
     auto pShadow = new OneShadowEffect(this);
     this->setGraphicsEffect(pShadow);
 
+    /* 设置提示文本 */
+    // ui->lineEdit->setPlaceholderText("请输入模版名称");
+    m_placeHolder = "请输入模版名称";
+    m_placeHolderColor = QColor("#B1B3B4");
+
     m_list.clear();
 
     ui->label_warn->hide();
@@ -41,6 +46,7 @@ SaveToTemplate::SaveToTemplate(QWidget *parent) :
 
     /* 注册事件过滤器 */
     ui->pBtn_close->installEventFilter(this);
+    ui->lineEdit->installEventFilter(this);
 }
 
 SaveToTemplate::~SaveToTemplate()
@@ -158,7 +164,8 @@ void SaveToTemplate::setWarning(bool flag)
 // {
 //     QPainter painter(this);
 //     painter.setRenderHint(QPainter::Antialiasing);
-//     painter.drawImage(QPoint(0, 0), m_shadow->image());
+//     /* 绘制占位符 */
+
 // }
 
 
@@ -182,6 +189,50 @@ bool SaveToTemplate::eventFilter(QObject *watched, QEvent *event)
             return true;
         }
     }
+    else if(watched == ui->lineEdit)
+    {
+        /* 绘画事件 */
+        if(event->type() == QEvent::Paint)
+        {
+            if(!m_isInputing && ui->lineEdit->text().isEmpty())
+            {
+                // LH_WRITE_LOG("绘制占位符");
+                /* 设置一输入文本占位符就消失 */
+                QPainter painter(ui->lineEdit);
+                painter.setRenderHint(QPainter::Antialiasing);
+                /* 获取占位符距离左边的距离 */
+                int left = ui->lineEdit->style()->pixelMetric(QStyle::PM_LayoutLeftMargin, nullptr, ui->lineEdit);
+                QRect rect = ui->lineEdit->rect();
+                rect.setLeft(left + 6);
+                /* 获取占位符字体和颜色 */
+                QFont font = ui->lineEdit->font();
+                painter.setFont(font);
+                QPalette palette = ui->lineEdit->palette();
+                painter.setPen(m_placeHolderColor);
+                /* 绘制占位符 */
+                painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, m_placeHolder);
+            }
+            // m_isInputing = false;
+        }
+        else if (event->type() == QEvent::InputMethod)
+        {
+            QInputMethodEvent *inputEvent = static_cast<QInputMethodEvent *>(event);
+            if (!inputEvent->preeditString().isEmpty())
+            {
+                // 输入法正在输入
+                m_isInputing = true;
+                // LH_WRITE_LOG("输入法正在输入");
+            }
+            else
+            {
+                // 输入法结束输入
+                m_isInputing = false;
+                // LH_WRITE_LOG("输入法结束输入");
+            }
+            ui->lineEdit->update(); // 更新界面
+        }
+        
+    }
     return QWidget::eventFilter(watched,event);
 }
 

+ 9 - 0
TransmitterSwitch/Template/savetotemplate.h

@@ -4,6 +4,7 @@
 #include <QDialog>
 #include <qchar.h>
 #include <QMap>
+#include <QColor>
 
 #include "TransmitterSwitchInfo.h"
 
@@ -13,6 +14,10 @@ namespace Ui {
 class SaveToTemplate;
 }
 
+/**
+ * @brief 注意,这里的QLineEdit占位符是用paintEvent实现的
+ * 
+ */
 
 class SaveToTemplate : public QDialog
 {
@@ -64,6 +69,10 @@ private:
     int m_weekDay;                          /* 周几 */
     QList<OneTemplateInfo> m_list;
 
+    bool m_isInputing = false;             /* 是否正在输入 */
+    QString m_placeHolder;                  /* 占位符 */
+    QColor m_placeHolderColor;              /* 占位符颜色 */
+
     bool m_isOk = false;                    /* 是否点击了确定 */
     QString m_templateName;                 /* 模板名称 */
 

+ 1 - 1
TransmitterSwitch/Template/savetotemplate.ui

@@ -83,7 +83,7 @@ background:transparent;
        </font>
       </property>
       <property name="placeholderText">
-       <string>请输入</string>
+       <string/>
       </property>
      </widget>
      <widget class="QPushButton" name="pBtn_cancel">

+ 30 - 2
TransmitterSwitch/Template/templatemanager.cpp

@@ -9,8 +9,7 @@
 #include <QPainter>
 #include <QMouseEvent>
 #include <memory>
-#include <qchar.h>
-#include <qnamespace.h>
+#include <QLineEdit>
 
 #include "warning/warning.h"
 #include "LHQLogAPI.h"
@@ -77,6 +76,10 @@ TemplateManager::TemplateManager(QWidget *parent) :
     //设置不显示选中后的虚线
     ui->tableWidget->setFocusPolicy(Qt::NoFocus);
 
+    /* 设置第二列输入字数限制 */
+    LineEditDelegate* delegate = new LineEditDelegate(15, this);
+    ui->tableWidget->setItemDelegateForColumn(1, delegate);
+
     //开启排序功能
 //    ui->tableWidget->setSortingEnabled(true);
 
@@ -119,6 +122,7 @@ void TemplateManager::do_clickedItem(int row, int column)
     {
         return;
     }
+    
     /* 判断是什么功能的单元格 */
     if(column == 2) 
     {
@@ -135,10 +139,19 @@ void TemplateManager::do_clickedItem(int row, int column)
         /* 删除 */
         deleteTemplate(item);
     }
+    // else if(column == 1)
+    // {
+    //     /* 限制QLineEdit字数 */
+    //     QLineEdit* editor = qobject_cast<QLineEdit*>(ui->tableWidget->indexWidget(ui->tableWidget->model()->index(row, column)));
+    //     if (editor) {
+    //         editor->setMaxLength(5); // 设置最大输入长度为 15
+    //     }
+    // }
     /* 强制重新绘制表格 */
     ui->tableWidget->repaint();
 }
 
+
 /* 单元格内容改变了 */
 void TemplateManager::do_itemChanged(QTableWidgetItem* item)
 {
@@ -153,6 +166,13 @@ void TemplateManager::do_itemChanged(QTableWidgetItem* item)
     {
         return;
     }
+    /* 判断新的名称是否为空 */
+    if(newName.isEmpty())
+    {
+        QString nowName = item->data(m_roleTemplateNameNow).toString();
+        item->setText(nowName);
+        return;
+    }
     /* 判断同频率下的模板名称是否冲突 */
     int rowCount = ui->tableWidget->rowCount();
     for(int i = 0; i < rowCount; i++)
@@ -184,6 +204,7 @@ void TemplateManager::do_itemChanged(QTableWidgetItem* item)
     }
     /* 修改模版名称 */
     m_mapModifyTemplateName.insert(info, newName);
+    item->setData(m_roleTemplateNameNow, newName);
 }
 
 
@@ -276,7 +297,14 @@ void TemplateManager::createRow(const OneTemplateInfo& info)
     item1->setFlags(item1->flags() | Qt::ItemIsEditable);
     item1->setData(m_roleChnID, info.channelInfo.ChannelID);
     item1->setData(m_roleTemplateName, info.templateName);
+    item1->setData(m_roleTemplateNameNow, info.templateName);
     ui->tableWidget->setItem(row, 1, item1);
+    /* 限制输入框的字数 */
+    // ui->tableWidget->openPersistentEditor(item1);
+    // QLineEdit* editor = qobject_cast<QLineEdit*>(ui->tableWidget->indexWidget(ui->tableWidget->model()->index(row, 1)));
+    // if (editor) {
+    //     editor->setMaxLength(15); // 设置最大输入长度为 15
+    // }
 
     /* 添加固定的三个项 */
     auto item2 = new QTableWidgetItem("预览");

+ 26 - 4
TransmitterSwitch/Template/templatemanager.h

@@ -4,8 +4,9 @@
 #include <QDialog>
 #include <QCheckBox>
 #include <QTableWidgetItem>
-#include <qchar.h>
-#include <qmap.h>
+#include <QMap>
+#include <QStyledItemDelegate>
+#include <QLineEdit>
 
 class TemplateItem;
 class OneTemplateInfo;
@@ -17,6 +18,26 @@ class TemplateManager;
 }
 
 
+
+/* 限制QLineEdit字数的代理类 */
+class LineEditDelegate : public QStyledItemDelegate {
+public:
+    explicit LineEditDelegate(int maxLength, QObject* parent = nullptr)
+        : QStyledItemDelegate(parent), m_maxLength(maxLength) {}
+
+    QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override 
+    {
+        QLineEdit* editor = new QLineEdit(parent);
+        /* 设置最大输入长度 */
+        editor->setMaxLength(m_maxLength); 
+        return editor;
+    }
+
+private:
+    int m_maxLength;
+};
+
+
 class TemplateManager : public QDialog
 {
     Q_OBJECT
@@ -85,8 +106,9 @@ private:
     int m_type = -1;                                    /* 模版类型 */
 
     QPoint m_lastPos;                                   /* 鼠标点击的位置 */
-    const int m_roleChnID = Qt::UserRole + 1;            /* 角色名称 */
-    const int m_roleTemplateName = Qt::UserRole + 2;     /* 角色名称 */
+    const int m_roleChnID = Qt::UserRole + 1;           /* 角色名称 */
+    const int m_roleTemplateName = Qt::UserRole + 2;    /* 模板名称,传进来的模板名称 */
+    const int m_roleTemplateNameNow = Qt::UserRole + 3; /* 模板名称,当前的模板名称 */
 
     QList<OneTemplateInfo> m_listTemplate;              /* 模版列表 */
 

+ 44 - 25
TransmitterSwitch/WebAPI/FromWebAPI.cpp

@@ -1007,7 +1007,7 @@ bool FromWebAPI::getOneTemplateData(OneTemplateInfo tmpInfo, QList<OnePlanItemIn
             list.append(info);
         }
 
-        LH_WRITE_LOG(QString("获取模板成功,数据数目:%1").arg(list.size()));
+        LH_WRITE_LOG_DEBUG(QString("获取模板数据成功,数据数目:%1").arg(list.size()));
     }
     catch (const nJson::parse_error& e)
     {
@@ -1042,7 +1042,8 @@ bool FromWebAPI::getTemplateData(QList<OneTemplateInfo>& listTemplate, QMap<int,
     {
         nJson json1;
         json1["opName"] = "TMS_GetExecPlanTemplateData";
-        json1["Key"] = QUuid::createUuid().toString().toStdString();
+        /* 这里的Key使用频率ID,方便后面区分是哪个频率的数据 */
+        json1["Key"] = it.channelInfo.ChannelID;
         nJson json2;
         json2["templateName"] = it.templateName.toStdString();
         json2["channelID"] = it.channelInfo.ChannelID;
@@ -1061,43 +1062,61 @@ bool FromWebAPI::getTemplateData(QList<OneTemplateInfo>& listTemplate, QMap<int,
         LH_WRITE_ERROR(QString("获取模板失败:%1, 错误信息:%2").arg(ret).arg(m_httpApi->DoGetLastError(&ret)));
         return false;
     }
-    // LH_WRITE_LOG_DEBUG(strRet);
+    LH_WRITE_LOG_DEBUG(QString("获取到的json数据的大小:%1").arg(strRet.size()));
     /* 解析获取到的JSON数据 */
     try
     {
         nJson jsonRet = nJson::parse(strRet.toStdString());
+
+        // LH_WRITE_LOG_DEBUG(QString("\n: %1").arg(QString::fromStdString(jsonRet.dump(4))));
+
         int retCode = jsonRet["code"].get<int>();
         if(retCode != 0)
         {
-            LH_WRITE_ERROR("获取模板失败");
+            LH_WRITE_ERROR("获取模板数据失败");
             return false;
         }
-        nJson result = jsonRet["result"];
-        for(auto& it : result)
+        nJson data = jsonRet["data"];
+        for(auto& it : data)
         {
-            OnePlanItemInfo info;
+            /* 逐步获取对应频率的计划信息 */
+            int retChnID = QString::fromStdString(it["key"].get<std::string>()).toInt();
+            if(retChnID == 0)
+            {
+                LH_WRITE_ERROR("获取到的频率ID为0");
+                continue;
+            }
+            nJson value = it["value"];
+            if(value.is_null())
+            {
+                LH_WRITE_ERROR("获取到的值为空");
+                continue;
+            }
+            int retCode1 = value["code"].get<int>();
+            if(retCode1 != 0)
+            {
+                LH_WRITE_ERROR(QString("获取模板:%1数据失败").arg(retChnID));
+                continue;
+            }
+            nJson result = value["result"];
+            QList<OnePlanItemInfo> listPlan;
+            for(auto& plan : result)
+            {
+                
+                OnePlanItemInfo info;
             
-            info.ChannelID = it["channelID"].is_null() ? -1 : it["channelID"].get<int>();
-            info.ChannelName = QString::fromStdString(it["channelName"].get<std::string>());
-            info.onWeekDay = static_cast<enum_WeekDay>(it["onWeekDay"].get<int>());
-            info.onDateTime.setDate(QDate::fromString(QString::fromStdString(it["onDate"].get<std::string>()), "yyyy-MM-dd"));
-            info.onDateTime.setTime(QTime::fromString(QString::fromStdString(it["onTime"].get<std::string>()), "hh:mm:ss"));
-            info.offWeekDay = static_cast<enum_WeekDay>(it["offWeekDay"].get<int>());
-            info.offDateTime.setDate(QDate::fromString(QString::fromStdString(it["offDate"].get<std::string>()), "yyyy-MM-dd"));
-            info.offDateTime.setTime(QTime::fromString(QString::fromStdString(it["offTime"].get<std::string>()), "hh:mm:ss"));
+                info.ChannelID = plan["channelID"].is_null() ? -1 : plan["channelID"].get<int>();
+                info.ChannelName = plan["channelName"].is_null() ? "" : QString::fromStdString(plan["channelName"].get<std::string>());
+                info.onWeekDay = static_cast<enum_WeekDay>(plan["onWeekDay"].get<int>());
+                info.onDateTime.setDate(QDate::fromString(QString::fromStdString(plan["onDate"].get<std::string>()), "yyyy-MM-dd"));
+                info.onDateTime.setTime(QTime::fromString(QString::fromStdString(plan["onTime"].get<std::string>()), "hh:mm:ss"));
+                info.offWeekDay = static_cast<enum_WeekDay>(plan["offWeekDay"].get<int>());
+                info.offDateTime.setDate(QDate::fromString(QString::fromStdString(plan["offDate"].get<std::string>()), "yyyy-MM-dd"));
+                info.offDateTime.setTime(QTime::fromString(QString::fromStdString(plan["offTime"].get<std::string>()), "hh:mm:ss"));
 
-            /* 查找该频率所属的列表 */
-            auto list = mapPlan.find(info.ChannelID);
-            if(list == mapPlan.end())
-            {
-                /* 创建一个新的列表 */
-                QList<OnePlanItemInfo> listPlan;
                 listPlan.append(info);
-                mapPlan.insert(info.ChannelID, listPlan);
-            }else {
-                /* 找到对应的列表 */
-                list->append(info);
             }
+            mapPlan.insert(retChnID, listPlan);
         }
 
     }

+ 31 - 21
TransmitterSwitch/transmitterswitch.cpp

@@ -82,7 +82,7 @@ TransmitterSwitch::TransmitterSwitch(QWidget *parent) :
     connect(ui->pBtn_defaultPlan, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnIsOpenPlan);
     connect(ui->rBtn_moment, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnExecMode);
     connect(ui->rBtn_day, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnExecMode);
-    connect(ui->pBtn_clearPlan, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnClearPlan);
+    // connect(ui->pBtn_clearPlan, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnClearPlan);
     connect(ui->pBtn_deletePlan, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnClearPlan);
     connect(ui->pBtn_cloneToOther, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnCopyToOther);
     connect(ui->pBtn_templateManager, &QPushButton::clicked, this, &TransmitterSwitch::do_pBtnManageTemplate);
@@ -546,13 +546,13 @@ void TransmitterSwitch::do_pBtnCopyToOther()
     auto pCard = PData.getCurrentPlanCard();
     if(pCard == nullptr)
     {
-        TipWidget::display(TipWidget::OPERATOR_FAIL, "没有选中频率卡片", this);
+        TipWidget::display(TipWidget::OPERATOR_WARN, "没有选中频率卡片", this);
         return;
     }
     /* 判断卡片有没有计划 */
     if(pCard->isPlanEmpty())
     {
-        TipWidget::display(TipWidget::OPERATOR_FAIL, "当前频率没有计划", this);
+        TipWidget::display(TipWidget::OPERATOR_WARN, "当前频率没有计划", this);
         return;
     }
 
@@ -691,7 +691,8 @@ void TransmitterSwitch::do_importData()
         {
             isSuccess = false;
         }
-    }else {
+    } else 
+    {
         /* 选中了卡片,只获取这个卡片的频率列表 */
         QList<OneTemplateInfo> list;
         if(m_fromWebAPI->getTemplateList(pCard->getChannelInfo().ChannelID, list))
@@ -732,6 +733,13 @@ void TransmitterSwitch::do_importData()
 
     /* 获取选中的模版 */
     auto tmpList = it->getSelectedTemplateList();
+    /* 判断有没有选中需要导入模版 */
+    if(tmpList.isEmpty())
+    {
+        TipWidget::display(TipWidget::OPERATOR_WARN, "无模板导入", this);
+        return;
+    }
+
     QMap<int, QList<OnePlanItemInfo>> mapPlan;
     m_fromWebAPI->getTemplateData(tmpList, mapPlan);
 
@@ -763,7 +771,7 @@ void TransmitterSwitch::do_importData()
     /* 调用回调函数 */
     if(m_trackCB != nullptr)
     {
-        m_trackCB(3, g_mapTrack.value(3));
+        m_trackCB(4, g_mapTrack.value(4));
     }
 }
 
@@ -812,24 +820,26 @@ void TransmitterSwitch::do_exportDataToEQM(ChannelInfo info)
     stt->setQSS(EPUIStyle.getQSSPath());
     stt->setTemplateList(list);
     stt->exec();
-    if(stt->isOk())
+    if(!stt->isOk())
     {
-        /* 获取一天的数据 */
-        QList<OnePlanItemInfo> listTmp;
-        pCard->getAllPlanInfo(listTmp);
-        /* 保存到模板 */
-        if(m_fromWebAPI->saveTemplate(stt->getTemplateName(), listTmp))
-        {
-            TipWidget::display(TipWidget::OPERATOR_OK, "保存模版成功", this);
-        }else {
-            TipWidget::display(TipWidget::OPERATOR_FAIL, "保存模版失败", this);
-        }
-        /* 调用回调函数 */
-        if(m_trackCB != nullptr)
-        {
-            m_trackCB(3, g_mapTrack.value(3));
-        }
+        return;
+    }
+    /* 获取一天的数据 */
+    QList<OnePlanItemInfo> listTmp;
+    pCard->getAllPlanInfo(listTmp);
+    /* 保存到模板 */
+    if(m_fromWebAPI->saveTemplate(stt->getTemplateName(), listTmp))
+    {
+        TipWidget::display(TipWidget::OPERATOR_OK, "保存模版成功", this);
+    }else {
+        TipWidget::display(TipWidget::OPERATOR_FAIL, "保存模版失败", this);
     }
+    /* 调用回调函数 */
+    if(m_trackCB != nullptr)
+    {
+        m_trackCB(3, g_mapTrack.value(3));
+    }
+    
 }
 
 

+ 0 - 19
TransmitterSwitch/transmitterswitch.ui

@@ -212,25 +212,6 @@
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QPushButton" name="pBtn_clearPlan">
-              <property name="minimumSize">
-               <size>
-                <width>88</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="maximumSize">
-               <size>
-                <width>88</width>
-                <height>32</height>
-               </size>
-              </property>
-              <property name="text">
-               <string>清空计划</string>
-              </property>
-             </widget>
-            </item>
             <item>
              <widget class="QPushButton" name="pBtn_templateManager">
               <property name="minimumSize">