Browse Source

修正获取最外层节点的算法

chengxr 1 year ago
parent
commit
6e863b00a9
3 changed files with 32 additions and 21 deletions
  1. 23 15
      QFD/CCanvas/CMind.cpp
  2. 8 5
      QFD/CCanvas/CMind.h
  3. 1 1
      QFD/widgets/DataTableWidget.cpp

+ 23 - 15
QFD/CCanvas/CMind.cpp

@@ -210,18 +210,6 @@ QList<CNodeData> CMind::nodesInLevel(int i) const
     return l;
 }
 
-QList<CNodeData> CMind::nodesInFinalLevel() const
-{
-    QList<CNodeData> l;
-    int lev = levels();
-    for (CNodeData n : m_nodeList) {
-        if (levelOfNode(n) == lev) {
-            l.append(n);
-        }
-    }
-    return l;
-}
-
 QList<CNodeData> CMind::subNodes(CNodeData n) const
 {
     QList<CNodeData> l;
@@ -233,20 +221,40 @@ QList<CNodeData> CMind::subNodes(CNodeData n) const
     return l;
 }
 
-int CMind::leavesOfNode(CNodeData n) const
+int CMind::leavesCountOfNode(CNodeData n) const
 {
     int d = 1;
     if (subNodes(n).count() > 0) {
         d = 0;
         for (CNodeData sub : subNodes(n)) {
-            d += leavesOfNode(sub);
+            d += leavesCountOfNode(sub);
         }
     }
 
     return d;
 }
 
-int CMind::leaves() const
+int CMind::leavesCount() const
+{
+    return leavesCountOfNode(root());
+}
+
+QList<CNodeData> CMind::leavesOfNode(CNodeData n) const
+{
+    QList<CNodeData> list;
+
+    if (subNodes(n).count() > 0) {
+        for (CNodeData sub : subNodes(n)) {
+            list.append(leavesOfNode(sub));
+        }
+    } else {
+        list.append(n);
+    }
+
+    return list;
+}
+
+QList<CNodeData> CMind::leaves() const
 {
     return leavesOfNode(root());
 }

+ 8 - 5
QFD/CCanvas/CMind.h

@@ -47,17 +47,20 @@ public:
     // 某一层节点列表, 第1层为根节点
     QList<CNodeData> nodesInLevel(int i) const;
 
-    // 最后一层节点
-    QList<CNodeData> nodesInFinalLevel() const;
-
     // 子节点列表
     QList<CNodeData> subNodes(CNodeData n) const;
 
     // 某节点的叶子节点个数或包含的分支数
-    int leavesOfNode(CNodeData n) const;
+    int leavesCountOfNode(CNodeData n) const;
 
     // 脑图的叶子节点个数或包含的分支数
-    int leaves() const;
+    int leavesCount() const;
+
+    // 某节点的叶子节点列表, 即最外层节点
+    QList<CNodeData> leavesOfNode(CNodeData n) const;
+
+    // 脑图的叶子节点列表
+    QList<CNodeData> leaves() const;
 
 signals:
     void sigRemoveNode(int id);

+ 1 - 1
QFD/widgets/DataTableWidget.cpp

@@ -128,7 +128,7 @@ void DataTableWidget::updateCurrentTable()
 
     QList<CNodeData> vList = hList;
     if (m_mind2->nodeList().count() > 0) {
-        vList = m_mind2->nodesInFinalLevel();
+        vList = m_mind2->leaves();
     }
 
     for (int i = 0; i < vList.count(); i++) {