Selaa lähdekoodia

导入专家数据时设置数据不可编辑;
修复编辑实测数据后切换数据条目时的crash;

chengxr 1 vuosi sitten
vanhempi
commit
c050d7f75b

+ 10 - 10
QFD/dbService/ClassSet.h

@@ -45,16 +45,16 @@ class NodeMatrixInfo
 {
 public:
     int id = -1;
-    QString expertName;   // 专家名称
-    QString expertId;     // 专家id
-    int engineerId;       // 工程id
-    int mindId;           // 脑图名称, 区分数据来源, 0:专家数据, 1:实测数据
-    QString node;         // 节点
-    QString abscissa;     // 横坐标
-    QString ordinate;     // 纵坐标
-    QString nodeValue;    // 节点值
-    QDateTime writeDate;  // 填写时间
-    QString mark;         // 页码
+    QString expertName;     // 专家名称
+    QString expertId;       // 专家id
+    int engineerId;         // 工程id
+    int mindId;             // 脑图名称, 区分数据来源, 0:专家数据, 1:实测数据
+    QString node;           // 节点
+    QString abscissa = "";  // 横坐标
+    QString ordinate = "";  // 纵坐标
+    QString nodeValue;      // 节点值
+    QDateTime writeDate;    // 填写时间
+    QString mark;           // 页码
     QString tableMsg;
     int tabIndex;     // tab索引
     QString strUuid;  // 区分组

+ 1 - 1
QFD/widgets/ConfigMeasureDataWidget.cpp

@@ -92,7 +92,7 @@ void ConfigMeasureDataWidget::updateNodeValue(NodeMatrixInfo *node)
                 if (exist->ordinate.length() > 0 && exist->ordinate != node->ordinate) {
                     continue;
                 }
-                m_nodeData[key].replace(i, node);
+                m_nodeData[key][i]->nodeValue = node->nodeValue;
                 return;
             }
         }

+ 23 - 6
QFD/widgets/DataTableWidget.cpp

@@ -94,9 +94,10 @@ void DataTableWidget::setupModels()
     for (int i = 1; i < m_mind1->levels(); i++) {
         QList<DataTableItemModel *> modelList;
 
-        // 方案优选和综合效能的评估数据采集页面只有一级, 不用切换页面
-        // 方案优选显示指标量纲和指标类型
-        // 综合效能显示指标类型
+        /// 方案优选和综合效能的评估数据采集
+        /// 页面只有一级, 不用切换页面
+        /// 方案优选显示指标量纲和指标类型
+        /// 综合效能显示指标类型
         if (m_process.type == SchemePlanManager::ImportEvalData
             && (m_process.indexType == ProjectManager::OptimalIndex
                 || m_process.indexType == ProjectManager::EfficiencyIndex)) {
@@ -165,6 +166,8 @@ void DataTableWidget::setupModels()
             break;
         }
 
+        /// 权重分析数据: 能力重要度评估,方案优选评估,综合效能评估
+        /// 评估数据: 技术措施重要度评估
         QList<CNodeData> nodes = m_mind1->nodesInLevel(i);
         for (int j = 0; j < nodes.count(); j++) {
             CNodeData node            = nodes[j];
@@ -439,9 +442,9 @@ void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExp
     m_data    = data;
     m_uuidStr = data.first()->strUuid;
 
-    // 加载来自专家的权重分析数据
+    // 加载权重分析数据
     if (m_process.type == SchemePlanManager::ImportWeightData) {
-        if (m_process.dSource == SchemePlanManager::FromExpert) {
+        if (m_process.dSource == SchemePlanManager::FromExpert) {  // 专家数据
             for (NodeMatrixInfo *info : data) {
                 for (QList<DataTableItemModel *> modelList : m_models.values()) {
                     for (DataTableItemModel *model : modelList) {
@@ -460,7 +463,7 @@ void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExp
                     }
                 }
             }
-        } else {
+        } else {  // 实测数据
             for (NodeMatrixInfo *info : data) {
                 for (QList<DataTableItemModel *> modelList : m_models.values()) {
                     for (DataTableItemModel *model : modelList) {
@@ -479,6 +482,7 @@ void DataTableWidget::setNodeMatrixData(QList<NodeMatrixInfo *> data, bool isExp
     }
 
     // 加载技术重要度的评估数据
+    // 由于表的结构相似, 所以不用不区分专家数据和实测数据
     if (m_process.type == SchemePlanManager::ImportEvalData && m_process.indexType == ProjectManager::TechIndex) {
         for (NodeMatrixInfo *info : data) {
             for (QList<DataTableItemModel *> modelList : m_models.values()) {
@@ -545,6 +549,16 @@ void DataTableWidget::updateModel(DataTableItemModel *model, QList<CNodeData> &h
         item->setToolTip(node.remark);
         model->setVerticalHeaderItem(i + vStart, item);
     }
+
+    if (m_process.dSource == SchemePlanManager::FromExpert) {
+        for (int i = 0; i < hHeaders.size(); i++) {
+            for (int j = 0; j < vHeaders.size(); j++) {
+                QStandardItem *item = new QStandardItem();
+                item->setEditable(false);
+                model->setItem(j, i, item);
+            }
+        }
+    }
 }
 
 void DataTableWidget::slotPrevious()
@@ -563,12 +577,15 @@ void DataTableWidget::slotTabCurrentChanged(int c)
     updateCurrentTable();
 }
 
+/// 用户编辑了表格数据后, 将数据存到数据库, 并更新本地数据源
 void DataTableWidget::itemChanged(QStandardItem *item)
 {
+    // 排除程序的填充数据操作, 只关心用户操作
     if (isFillingData == true) {
         return;
     }
 
+    // 只关心用户编辑实测数据
     bool weightData = m_process.type == SchemePlanManager::ImportWeightData
             && m_process.dSource == SchemePlanManager::FromMeasurement;
     bool evalData = m_process.type == SchemePlanManager::ImportEvalData