Эх сурвалжийг харах

自定义 node 的 widget, 可以从外界设置, 而不用创建新的类

chengxr 1 жил өмнө
parent
commit
41f2dabbc5

+ 8 - 0
QFD/widgets/SchemeFlowWidget.cpp

@@ -1,5 +1,6 @@
 #include "SchemeFlowWidget.h"
 
+#include "shemeFlow/FlowGraphNodeWidget.h"
 #include "ProjectManager.h"
 
 #include <dbService/ClassSet.h>
@@ -139,6 +140,9 @@ void SchemeFlowWidget::refresh()
     case ProjectManager::TechIndex: {
         NodeId id1 = graphModel->addNode(FlowIndexData().type().id);
         graphModel->setNodeData(id1, NodeRole::Position, QPointF(0, h * 0));
+        FlowGraphPlainNodeWidget *w = new FlowGraphPlainNodeWidget();
+        w->setText("构建权重分析指标体系");
+        graphModel->setNodeData(id1, NodeRole::Widget, QVariant::fromValue(w));
 
         NodeId id2 = graphModel->addNode(FlowSampleData().type().id);
         graphModel->setNodeData(id2, NodeRole::Position, QPointF(0, h * 1));
@@ -147,18 +151,22 @@ void SchemeFlowWidget::refresh()
 
         NodeId id3 = graphModel->addNode(FlowPCAData().type().id);
         graphModel->setNodeData(id3, NodeRole::Position, QPointF(0, h * 2));
+        graphModel->setNodeData(id3, NodeRole::Caption, QString("指标体系优化"));
         graphModel->addConnection(ConnectionId { id2, 0, id3, 0 });
 
         NodeId id4 = graphModel->addNode(FlowWeightData().type().id);
         graphModel->setNodeData(id4, NodeRole::Position, QPointF(0, h * 3));
+        graphModel->setNodeData(id4, NodeRole::Caption, QString("指标权重计算"));
         graphModel->addConnection(ConnectionId { id3, 0, id4, 0 });
 
         NodeId id5 = graphModel->addNode(FlowResultData().type().id);
         graphModel->setNodeData(id5, NodeRole::Position, QPointF(0, h * 4));
+        graphModel->setNodeData(id5, NodeRole::Caption, QString("分析结果展示"));
         graphModel->addConnection(ConnectionId { id4, 0, id5, 0 });
 
         NodeId id6 = graphModel->addNode(FlowReportData().type().id);
         graphModel->setNodeData(id6, NodeRole::Position, QPointF(0, h * 5));
+        graphModel->setNodeData(id6, NodeRole::Caption, QString("生成分析评估报告"));
         graphModel->addConnection(ConnectionId { id5, 0, id6, 0 });
         break;
     }

+ 7 - 0
QtNodes/include/QtNodes/internal/DataFlowGraphModel.hpp

@@ -122,7 +122,14 @@ private:
     std::unordered_set<ConnectionId> _connectivity;
 
     mutable std::unordered_map<NodeId, NodeGeometryData> _nodeGeometryData;
+
+    /**
+     * 保存节点信息
+     * date: 2023-11-02 by chengxr
+     */
     mutable std::unordered_map<NodeId, QString> _captionData;
+
+    mutable std::unordered_map<NodeId, QWidget *> _widgetData;
 };
 
 }  // namespace QtNodes

+ 6 - 2
QtNodes/src/DataFlowGraphModel.cpp

@@ -204,8 +204,9 @@ QVariant DataFlowGraphModel::nodeData(NodeId nodeId, NodeRole role) const
         break;
 
     case NodeRole::Widget: {
-        auto w = model->embeddedWidget();
-        result = QVariant::fromValue(w);
+        //        auto w = model->embeddedWidget();
+        QWidget *w = _widgetData[nodeId];
+        result     = QVariant::fromValue(w);
     } break;
     }
 
@@ -268,6 +269,9 @@ bool DataFlowGraphModel::setNodeData(NodeId nodeId, NodeRole role, QVariant valu
         break;
 
     case NodeRole::Widget:
+        _widgetData[nodeId] = value.value<QWidget *>();
+        Q_EMIT nodeCreated(nodeId);
+        return true;
         break;
     }