Przeglądaj źródła

V1.4.2
1、完成了模板名称修改功能

apple 2 tygodni temu
rodzic
commit
cfc92da504

+ 6 - 0
TransmitterSwitch/Resource/QSS/dark/templatemanager.qss

@@ -157,6 +157,12 @@ QTableWidget::item:selected
     background: #438EFF;
 }
 
+/* QTableWidget::item:selected:focus
+{
+    color: #464649;
+    background: #438EFF;
+} */
+
 /* QCheckBox::indicator
 {
     width: 16px;

+ 46 - 6
TransmitterSwitch/Template/templatemanager.cpp

@@ -10,6 +10,7 @@
 #include <QMouseEvent>
 #include <memory>
 #include <qchar.h>
+#include <qnamespace.h>
 
 #include "warning/warning.h"
 #include "LHQLogAPI.h"
@@ -61,8 +62,8 @@ TemplateManager::TemplateManager(QWidget *parent) :
     //设置行高
     ui->tableWidget->verticalHeader()->setDefaultSectionSize(40);
     
-    //设置不可编辑
-    ui->tableWidget->setEditTriggers(QTableWidget::NoEditTriggers);
+    /* 设置可编辑,后续创建的时候,单独设置不可编辑 */
+    ui->tableWidget->setEditTriggers(QTableWidget::DoubleClicked);
     //设置选中一行
     ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
     //设置只能选中一行
@@ -148,11 +149,41 @@ void TemplateManager::do_itemChanged(QTableWidgetItem* item)
     info.templateName = item->data(m_roleTemplateName).toString();
     info.channelInfo.ChannelID = item->data(m_roleChnID).toInt();
     /* 判断是否修改了模版名称 */
-    if(newName != info.templateName)
+    if(newName == info.templateName)
     {
-        /* 修改模版名称 */
-        m_mapModifyTemplateName.insert(info, newName);
+        return;
+    }
+    /* 判断同频率下的模板名称是否冲突 */
+    int rowCount = ui->tableWidget->rowCount();
+    for(int i = 0; i < rowCount; i++)
+    {
+        /* 排除当前项 */
+        if(i == item->row())
+        {
+            continue;
+        }
+        /* 获取当前项显示的名称 */
+        auto itemTmp = ui->tableWidget->item(i, 1);
+        if(itemTmp == nullptr)
+        {
+            continue;
+        }
+        /* 获取当前项的模版名称 */
+        QString strName = itemTmp->text();
+        /* 获取当前项的模版频率 */
+        int chnID = itemTmp->data(m_roleChnID).toInt();
+        /* 判断是否冲突 */
+        if(chnID == info.channelInfo.ChannelID && strName == newName)
+        {
+            /* 已经存在相同的模版名称 */
+            LH_WRITE_ERROR(QString("模版名称冲突:%1").arg(newName));
+            TipWidget::display(TipWidget::OPERATOR_FAIL, "模版名称冲突", this);
+            item->setText(info.templateName);
+            return;
+        }
     }
+    /* 修改模版名称 */
+    m_mapModifyTemplateName.insert(info, newName);
 }
 
 
@@ -172,10 +203,15 @@ void TemplateManager::showEvent(QShowEvent *event)
 /* 设置模版列表 */
 void TemplateManager::setTemplateList(const QMultiMap<int, OneTemplateInfo>& mapTemplate)
 {
+    // 暂时阻止 itemChanged 信号
+    ui->tableWidget->blockSignals(true);
     for(auto it = mapTemplate.begin(), end = mapTemplate.end(); it != end; it++)
     {
         createRow(it.value());
+        m_listTemplate.append(it.value());
     }
+    // 恢复信号
+    ui->tableWidget->blockSignals(false);
 }
 
 
@@ -232,6 +268,7 @@ void TemplateManager::createRow(const OneTemplateInfo& info)
 
     /* 频率名称 */
     QTableWidgetItem* item0 = new QTableWidgetItem(info.channelInfo.ChannelName);
+    item0->setFlags(item0->flags() & ~Qt::ItemIsEditable);
     item0->setData(m_roleChnID, info.channelInfo.ChannelID);
     ui->tableWidget->setItem(row, 0, item0);
     /* 模板名称,需要可编辑 */
@@ -243,18 +280,21 @@ void TemplateManager::createRow(const OneTemplateInfo& info)
 
     /* 添加固定的三个项 */
     auto item2 = new QTableWidgetItem("预览");
+    item2->setFlags(item0->flags() & ~Qt::ItemIsEditable);
     item2->setData(m_roleChnID, info.channelInfo.ChannelID);
     item2->setData(m_roleTemplateName, info.templateName);
     item2->setForeground(QBrush("#438EFF"));
     ui->tableWidget->setItem(row, 2, item2);
 
     auto item3 = new QTableWidgetItem("修改");
+    item3->setFlags(item0->flags() & ~Qt::ItemIsEditable);
     item3->setData(m_roleChnID, info.channelInfo.ChannelID);
     item3->setData(m_roleTemplateName, info.templateName);
     item3->setForeground(QBrush("#438EFF"));
     ui->tableWidget->setItem(row, 3, item3);
 
     auto item4 = new QTableWidgetItem("删除");
+    item4->setFlags(item0->flags() & ~Qt::ItemIsEditable);
     item4->setData(m_roleChnID, info.channelInfo.ChannelID);
     item4->setData(m_roleTemplateName, info.templateName);
     item4->setForeground(QBrush("#438EFF"));
@@ -335,7 +375,7 @@ void TemplateManager::deleteTemplate(QTableWidgetItem* item)
     m_listDeleteTemplate.append(info);
     /* 删除当前行 */
     ui->tableWidget->removeRow(item->row());
-
+    m_listTemplate.removeOne(info);
 }
 
 /* 预览 */

+ 1 - 2
TransmitterSwitch/Template/templatemanager.h

@@ -16,6 +16,7 @@ namespace Ui {
 class TemplateManager;
 }
 
+
 class TemplateManager : public QDialog
 {
     Q_OBJECT
@@ -84,8 +85,6 @@ private:
     int m_type = -1;                                    /* 模版类型 */
 
     QPoint m_lastPos;                                   /* 鼠标点击的位置 */
-    const std::string m_propertyChnID = "ChannelID";    /* 属性名称 */
-    const std::string m_propertytmpName = "TemplateName";/* 属性名称 */
     const int m_roleChnID = Qt::UserRole + 1;            /* 角色名称 */
     const int m_roleTemplateName = Qt::UserRole + 2;     /* 角色名称 */
 

+ 11 - 0
TransmitterSwitch/TransmitterSwitchInfo.cpp

@@ -302,3 +302,14 @@ bool OneTemplateInfo::operator<(const OneTemplateInfo& info) const
     return false;
 }
 
+
+bool OneTemplateInfo::operator==(const OneTemplateInfo& info) const
+{
+    if(this == &info)
+        return true;
+    if(channelInfo.ChannelID == info.channelInfo.ChannelID && templateName == info.templateName)
+    {
+        return true;
+    }
+    return false;
+}

+ 1 - 0
TransmitterSwitch/TransmitterSwitchInfo.h

@@ -358,6 +358,7 @@ struct OneTemplateInfo
     OneTemplateInfo(const OneTemplateInfo& info);
     OneTemplateInfo& operator=(const OneTemplateInfo& info);
     bool operator<(const OneTemplateInfo& info) const;
+    bool operator==(const OneTemplateInfo& info) const;
 };
 
 

+ 12 - 1
TransmitterSwitch/transmitterswitch.cpp

@@ -605,7 +605,18 @@ void TransmitterSwitch::do_pBtnManageTemplate()
 {
     QMultiMap<int, OneTemplateInfo> tabList;
 
-    /* 没有选中卡片,获取全部的频率 */
+    // OneTemplateInfo testInfo;
+    // testInfo.channelInfo.ChannelID = 1;
+    // testInfo.channelInfo.ChannelName = "测试频率1";
+    // testInfo.templateName = "模版1";
+    // tabList.insert(testInfo.channelInfo.ChannelID, testInfo);
+
+    // testInfo.channelInfo.ChannelID = 1;
+    // testInfo.channelInfo.ChannelName = "测试频率2";
+    // testInfo.templateName = "模版2";
+    // tabList.insert(testInfo.channelInfo.ChannelID, testInfo);
+
+    /* 获取全部的频率 */
     if(!m_fromWebAPI->getTemplateList(tabList))
     {
         TipWidget::display(TipWidget::OPERATOR_FAIL, "获取模版列表失败", this);