Jelajahi Sumber

编辑方案数据;
显示选择和缺省方案;
输入合法性校验;

chengxr 1 tahun lalu
induk
melakukan
b1ae24fe59

+ 14 - 0
ExpertClient/EXDataTableView.cpp

@@ -126,6 +126,7 @@ void EXDataTableView::setupModels()
         for (int j = 0; j < nodes.count(); j++) {
             CNodeData node         = nodes[j];
             EXDataItemModel *model = new EXDataItemModel(this);
+            connect(model, &QStandardItemModel::itemChanged, this, &EXDataTableView::itemChanged);
 
             if (m_process.type == SchemePlanManager::ImportWeightData) {
                 hHeaders = m_mind1->subNodes(node);
@@ -414,3 +415,16 @@ void EXDataTableView::slotSave()
 
     NodeMatrixService().AddNodeMatrixInfoList2(values);
 }
+
+void EXDataTableView::itemChanged(QStandardItem *item)
+{
+    if (m_process.type == SchemePlanManager::ImportWeightData) {
+        return;
+    }
+
+    QString Pattern("(\\d*\\.?\\d*)");  // 匹配非负数
+    QRegExp reg(Pattern);
+    if (!reg.exactMatch(item->text())) {
+        item->setText("");
+    }
+}

+ 2 - 0
ExpertClient/EXDataTableView.h

@@ -85,6 +85,8 @@ private slots:
     void slotItemClicked(const QModelIndex &index);
     void slotSave();
 
+    void itemChanged(QStandardItem *item);
+
 private:
     SchemePlanManager::SchemeProcessInfo m_process;
 

+ 21 - 2
QFD/widgets/ConfigSchemeDataWidget.cpp

@@ -27,6 +27,7 @@ void ConfigSchemeDataWidget::setProcess(SchemePlanManager::SchemeProcessInfo pro
 {
     m_process = process;
     loadData();
+    selectFirst();
 }
 
 void ConfigSchemeDataWidget::loadData()
@@ -51,6 +52,23 @@ QList<SchemaEval *> ConfigSchemeDataWidget::schemeList() const
     return m_schemeList;
 }
 
+void ConfigSchemeDataWidget::selectFirst()
+{
+    if (m_listWidget->count() <= 0) {
+        return;
+    }
+
+    m_listWidget->setCurrentRow(0);
+}
+
+void ConfigSchemeDataWidget::selectLast()
+{
+    if (m_listWidget->count() <= 0) {
+        return;
+    }
+    m_listWidget->setCurrentRow(m_listWidget->count() - 1);
+}
+
 void ConfigSchemeDataWidget::initWidget()
 {
     m_titleLabel = new QLabel("添加方案数据", this);
@@ -106,7 +124,7 @@ void ConfigSchemeDataWidget::initLayout()
 void ConfigSchemeDataWidget::connectSignalsAndSlots()
 {
     connect(m_addButton, &PushButton::clicked, this, &ConfigSchemeDataWidget::slotAddDataClicked);
-    connect(m_listWidget, &QListWidget::currentRowChanged, this, &ConfigSchemeDataWidget::slotSelectedChanged);
+    connect(m_listWidget, &QListWidget::itemSelectionChanged, this, &ConfigSchemeDataWidget::slotSelectedChanged);
 }
 
 void ConfigSchemeDataWidget::refreshList()
@@ -125,8 +143,9 @@ void ConfigSchemeDataWidget::slotAddDataClicked()
     emit sigAddScheme();
 }
 
-void ConfigSchemeDataWidget::slotSelectedChanged(int row)
+void ConfigSchemeDataWidget::slotSelectedChanged()
 {
+    int row = m_listWidget->currentRow();
     if (m_schemeList.size() <= row || row < 0) {
         return;
     }

+ 4 - 1
QFD/widgets/ConfigSchemeDataWidget.h

@@ -26,6 +26,9 @@ public:
 
     QList<SchemaEval *> schemeList() const;
 
+    void selectFirst();
+    void selectLast();
+
 signals:
 
     void sigAddScheme();
@@ -39,7 +42,7 @@ private:
 
 private slots:
     void slotAddDataClicked();
-    void slotSelectedChanged(int row);
+    void slotSelectedChanged();
 
 private:
     SchemePlanManager::SchemeProcessInfo m_process;

+ 2 - 6
QFD/widgets/DataCollectionWidget.cpp

@@ -173,11 +173,6 @@ void DataCollectionWidget::setupTabWidget()
     }
 }
 
-void DataCollectionWidget::refreshSchemeData()
-{
-    m_configScheme->loadData();
-}
-
 void DataCollectionWidget::slotTabCurrentChanged(int index)
 {
     DataTableWidget *table = dynamic_cast<DataTableWidget *>(m_tab->widget(index));
@@ -443,7 +438,8 @@ void DataCollectionWidget::slotAddSchemeInfo(const QString name, const QString r
     scheme->type       = type;
     bool ret           = SchemeInfoService().AddSchemeInfoList({ scheme });
     if (ret) {
-        refreshSchemeData();
+        m_configScheme->loadData();
+        m_configScheme->selectLast();
         table->addScheme(scheme);
     }
 }

+ 0 - 2
QFD/widgets/DataCollectionWidget.h

@@ -35,8 +35,6 @@ public:
 private:
     void setupTabWidget();
 
-    void refreshSchemeData();
-
 private slots:
     void slotTabCurrentChanged(int index);
     void slotCalc();

+ 23 - 4
QFD/widgets/DataTableWidget.cpp

@@ -19,7 +19,6 @@
 #include <QStandardItemModel>
 #include <QStandardItem>
 #include <QHeaderView>
-
 #include <QDebug>
 
 static const char *kDataTabName = "tabName";
@@ -143,11 +142,12 @@ void DataTableWidget::setupModels()
                 SchemeInfoService().QuerySchemeInfoByEngineerId(&m_schemeList, m_process.projectId, 0);
             }
 
+            m_schemeStartIndex = hIndex + 1;
+
             if (m_schemeList.count() > 0) {
                 for (SchemaEval *scheme : m_schemeList) {
                     QStandardItem *item = new QStandardItem(scheme->name);
                     model->setHorizontalHeaderItem(++hIndex, item);
-                    m_schemeStartIndex = hIndex;
                     for (QString indexValue : scheme->valueStr.split(";")) {
                         QStringList indexAndValue = indexValue.split(":");
                         if (indexAndValue.size() < 2) {
@@ -607,12 +607,13 @@ void DataTableWidget::itemChanged(QStandardItem *item)
         return;
     }
 
+    // 校验输入字符的合法性, 只允许输入非负数
+    // 遇到非法字符时, 恢复原值
     static bool useOldData = false;
     if (useOldData) {
         useOldData = false;
         return;
     }
-
     // ([0-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])
     // (-?[1-9][0-9]+)|(-?[0-9])|(-?[1-9]\\d+\\.\\d+)|(-?[0-9]\\.\\d+)
     QString Pattern("(\\d*\\.?\\d*)");  // 匹配非负数
@@ -662,5 +663,23 @@ void DataTableWidget::itemChanged(QStandardItem *item)
         }
     }
 
-    if (schemeData) { }
+    if (schemeData) {
+        int index = item->column() - m_schemeStartIndex;
+        if (index < 0 || index >= m_schemeList.size()) {
+            return;
+        }
+        SchemaEval *scheme = m_schemeList[index];
+
+        QStringList valueStr;
+        for (int i = 0; i < item->model()->rowCount(); i++) {
+            QStandardItem *vHeader = item->model()->verticalHeaderItem(i);
+            QStandardItem *t       = item->model()->item(i, item->column());
+            if (t != nullptr && t->text().trimmed().length() > 0) {
+                QString value = QString("%1:%2").arg(vHeader->text()).arg(t->text());
+                valueStr.append(value);
+            }
+        }
+        scheme->valueStr = valueStr.join(";");
+        SchemeInfoService().UpdateValueStrById(scheme->id, scheme->valueStr);
+    }
 }

+ 1 - 1
QFD/widgets/DataTableWidget.h

@@ -115,7 +115,7 @@ private:
 
     bool m_isFillingData = false;
 
-    int m_schemeStartIndex = -1;
+    int m_schemeStartIndex = -1;  // 方案数据开始列
     QList<SchemaEval *> m_schemeList;
 };