Parcourir la source

显示节域值

chengxr il y a 1 an
Parent
commit
5e1201fe94

+ 1 - 0
QFD/algorithm/GreyClusterEvaluation.cpp

@@ -74,6 +74,7 @@ void GreyClusterEvaluation::evaluationlevel(const QVector<double> &weights)
     for (int i = 0; i < level_num_; ++i) {
         double front_val = 0;
         double back_val  = 0;
+
         for (int j = 0; j < sample_num_; ++j) {
             front_val = front_val + ranges_cv_.at(j).at(i).front_val * weights[j];
             back_val  = back_val + ranges_cv_.at(j).at(i).back_val * weights[j];

+ 7 - 2
QFD/widgets/GreyClusteringSampleTable.cpp

@@ -325,6 +325,7 @@ void GreyClusteringSampleTable::compute()
 
     QVector<GCEmat> samples;
     int colCount = m_nodeDepth + 4 + m_grayNumber;
+
     for (int r = 0; r < m_rowCount; ++r) {
         samples << GCEmat { m_model->item(r, colCount)->text().toDouble(),
                             m_model->item(r, colCount + 1)->text().toDouble() };
@@ -369,9 +370,13 @@ void GreyClusteringSampleTable::compute()
             ranges << rg;
         }
     }
-
     QScopedPointer<GreyClusterEvaluation> gc(new GreyClusterEvaluation(mat, ranges));
-    gc->evaluate({ 0.2, 0.15, 0.05, 0.4, 0.2 });
+
+    // { 0.2, 0.15, 0.05, 0.4, 0.2 }
+
+    QVector<double> weights(m_rowCount, 1.0 / m_rowCount);
+
+    gc->evaluate(weights);
     BestIndex index = gc->getBestIndex();
     qDebug() << index.front_index << index.back_index;
 }

+ 60 - 7
QFD/widgets/MatterElementConfigWidget.cpp

@@ -294,10 +294,12 @@ void MatterElementConfigWidget::initDomainTable()
         table->verticalHeader()->hide();
         table->verticalHeader()->setDefaultSectionSize(60);
         table->horizontalHeader()->hide();
-        QStandardItemModel *tModel = new QStandardItemModel;
+        QStandardItemModel *tModel = new QStandardItemModel(table);
         m_domainModels << tModel;
 
         table->setModel(tModel);
+        ui->tabWidget->addTab(table, m_allConfigItems.at(pindex).parentName);
+        connect(tModel, &QStandardItemModel::itemChanged, this, &MatterElementConfigWidget::onTableItemChanged);
 
         int indexNumber = m_allConfigItems.at(pindex).childs.size();
         qDebug() << indexNumber;
@@ -344,16 +346,17 @@ void MatterElementConfigWidget::initDomainTable()
 
                 s = new QStandardItem();
                 s->setTextAlignment(Qt::AlignCenter);
-                s->setText(QString("(%1, %2)")
-                                   .arg(m_allConfigItems[pindex].childs[k].leftValues[r])
-                                   .arg(m_allConfigItems[pindex].childs[k].rightValues[r]));
-                tModel->setItem(k, r * 4 + 3, s);
+
+                if (r < m_domainLevel) {
+                    s->setText(QString("(%1, %2)")
+                                       .arg(m_allConfigItems[pindex].childs[k].leftValues[r])
+                                       .arg(m_allConfigItems[pindex].childs[k].rightValues[r]));
+                    tModel->setItem(k, r * 4 + 3, s);
+                }
             }
 
             table->setItemDelegateForColumn(r * 4 + 3, m_meRangeDelegate);
         }
-
-        ui->tabWidget->addTab(table, m_allConfigItems.at(pindex).parentName);
     }
 
     connect(ui->cleanBtn, &QToolButton::clicked, this, &MatterElementConfigWidget::onClearBtnClick);
@@ -570,6 +573,56 @@ void MatterElementConfigWidget::onSaveBtnClick()
     qDeleteAll(gradeIndexInfoList);
 }
 
+void MatterElementConfigWidget::onTableItemChanged(QStandardItem *item)
+{
+    qDebug() << __FUNCTION__ << __LINE__ << item->column() << endl;
+    if (item->column() >= m_domainLevel * 4 || item->column() % 4 != 3) {
+        return;
+    }
+
+    QTableView *table = (QTableView *)item->model()->parent();
+    int current       = ui->tabWidget->indexOf(table);
+    if (current < 0 || current >= m_allConfigItems.size()) {
+        return;
+    }
+    if (m_allConfigItems.at(current).childs.size() <= item->row()) {
+        return;
+    }
+
+    MEDomain d    = m_allConfigItems.at(current).childs[item->row()];
+    QString left  = QString("%1").arg(d.leftValues.first());
+    QString left1 = QString("%1").arg(d.rightValues.first());
+    ;
+    if (item->column() / 4 == 0 && item->text().length() > 2) {
+        QStringList valueList = item->text().mid(1, item->text().length() - 2).split(", ");
+        left                  = valueList.first();
+        left1                 = valueList.last();
+    }
+
+    QString right  = QString("%1").arg(d.rightValues[d.rightValues.size() - 1]);
+    QString right1 = QString("%1").arg(d.leftValues[d.leftValues.size() - 1]);
+    ;
+    if (item->column() / 4 == m_domainLevel - 1 && item->text().length() > 2) {
+        QStringList valueList = item->text().mid(1, item->text().length() - 2).split(", ");
+        right                 = valueList.last();
+        right1                = valueList.first();
+    }
+
+    QString text = QString("(%1, %2)").arg(left).arg(right);
+    if (left.toDouble() > right.toDouble()) {
+        text = QString("(%1, %2)").arg(left1).arg(right1);
+    }
+
+    QStandardItem *i = item->model()->item(item->row(), m_domainLevel * 4 + 3);
+
+    if (i) {
+        i->setText(text);
+    } else {
+        i = new QStandardItem(text);
+        item->model()->setItem(item->row(), m_domainLevel * 4 + 3, i);
+    }
+}
+
 QList<MEConfigItem> MatterElementConfigWidget::getAllConfigItems() const
 {
     return m_allConfigItems;

+ 1 - 0
QFD/widgets/MatterElementConfigWidget.h

@@ -49,6 +49,7 @@ private slots:
     void onScaleValueUpdate();
     void onClearBtnClick();
     void onSaveBtnClick();
+    void onTableItemChanged(QStandardItem *item);
 
 private:
     Ui::MatterElementConfigWidget *ui;