Browse Source

修改脑图鼠标样式
修改流程图朝向和接口样式

chengxr 1 year ago
parent
commit
aadbe440f2

+ 38 - 0
QFD/CCanvas/CMindView.cpp

@@ -191,12 +191,50 @@ void CMindView::mousePressEvent(QMouseEvent *event)
         moveToCenter();
     }
 
+    m_isMovingItem =
+            item != nullptr && (item->flags() & QGraphicsObject::ItemIsMovable) == QGraphicsObject::ItemIsMovable;
+
+    if (m_isMovingItem) {
+        setCursor(Qt::ClosedHandCursor);
+    } else {
+        setCursor(Qt::ArrowCursor);
+    }
+
     QGraphicsView::mousePressEvent(event);
 }
 
 void CMindView::mouseMoveEvent(QMouseEvent *event)
 {
     QGraphicsView::mouseMoveEvent(event);
+    QGraphicsItem *item = itemAt(event->pos());
+
+    if (m_isMovingItem) {
+        setCursor(Qt::ClosedHandCursor);
+    } else {
+        bool movable =
+                item != nullptr && (item->flags() & QGraphicsObject::ItemIsMovable) == QGraphicsObject::ItemIsMovable;
+
+        if (movable) {
+            setCursor(Qt::OpenHandCursor);
+        } else {
+            setCursor(Qt::ArrowCursor);
+        }
+    }
+}
+
+void CMindView::mouseReleaseEvent(QMouseEvent *event)
+{
+    m_isMovingItem      = false;
+    QGraphicsItem *item = itemAt(event->pos());
+    bool movable =
+            item != nullptr && (item->flags() & QGraphicsObject::ItemIsMovable) == QGraphicsObject::ItemIsMovable;
+
+    if (movable) {
+        setCursor(Qt::OpenHandCursor);
+    } else {
+        setCursor(Qt::ArrowCursor);
+    }
+    QGraphicsView::mouseReleaseEvent(event);
 }
 
 bool CMindView::isCloseToEdge()

+ 4 - 1
QFD/CCanvas/CMindView.h

@@ -40,6 +40,8 @@ public:
 
     void mouseMoveEvent(QMouseEvent *event) override;
 
+    void mouseReleaseEvent(QMouseEvent *event) override;
+
     bool isCloseToEdge();
 
     void moveToCenter();
@@ -75,7 +77,8 @@ private:
     // 场景中显示的项目
     QList<QGraphicsItem *> m_items;
 
-    bool m_align = true;
+    bool m_align        = true;
+    bool m_isMovingItem = false;
 };
 
 #endif  // CMINDVIEW_H

+ 7 - 1
QFD/shemeFlow/FlowTemplateDataModel.h

@@ -416,7 +416,13 @@ public:
 
     QString name() const override { return QString("FlowReportData"); }
 
-    unsigned int nPorts(PortType const /*portType*/) const override { return 1; }
+    unsigned int nPorts(PortType const pt) const override
+    {
+        if (pt == PortType::In) {
+            return 1;
+        }
+        return 0;
+    }
 
     NodeDataType dataType(PortType const portType, PortIndex const portIndex) const override
     {

+ 19 - 17
QFD/widgets/SchemeFlowWidget.cpp

@@ -115,6 +115,7 @@ void SchemeFlowWidget::initWidget()
 
     auto scene         = new DataFlowGraphicsScene(*graphModel);
     GraphicsView *view = new GraphicsView(scene);
+    scene->setOrientation(Qt::Vertical);
 
     QHBoxLayout *l = new QHBoxLayout(this);
     l->addWidget(view);
@@ -131,74 +132,75 @@ void SchemeFlowWidget::refresh()
 {
     clearAllNodes();
 
-    qreal h = 240;
+    qreal h = 120;
 
     switch (m_indexType) {
     case ProjectManager::AbilityIndex:
     case ProjectManager::TechIndex: {
         NodeId id1 = graphModel->addNode(FlowIndexData().type().id);
-        graphModel->setNodeData(id1, NodeRole::Position, QPointF(h * 0, 0));
+        graphModel->setNodeData(id1, NodeRole::Position, QPointF(0, h * 0));
 
         NodeId id2 = graphModel->addNode(FlowSampleData().type().id);
-        graphModel->setNodeData(id2, NodeRole::Position, QPointF(h * 1, 0));
+        graphModel->setNodeData(id2, NodeRole::Position, QPointF(0, h * 1));
+        graphModel->setNodeData(id2, NodeRole::Caption, QString("收集权重分析数据"));
         graphModel->addConnection(ConnectionId { id1, 0, id2, 0 });
 
         NodeId id3 = graphModel->addNode(FlowPCAData().type().id);
-        graphModel->setNodeData(id3, NodeRole::Position, QPointF(h * 2, 0));
+        graphModel->setNodeData(id3, NodeRole::Position, QPointF(0, h * 2));
         graphModel->addConnection(ConnectionId { id2, 0, id3, 0 });
 
         NodeId id4 = graphModel->addNode(FlowWeightData().type().id);
-        graphModel->setNodeData(id4, NodeRole::Position, QPointF(h * 0, 200));
+        graphModel->setNodeData(id4, NodeRole::Position, QPointF(0, h * 3));
         graphModel->addConnection(ConnectionId { id3, 0, id4, 0 });
 
         NodeId id5 = graphModel->addNode(FlowResultData().type().id);
-        graphModel->setNodeData(id5, NodeRole::Position, QPointF(h * 1, 200));
+        graphModel->setNodeData(id5, NodeRole::Position, QPointF(0, h * 4));
         graphModel->addConnection(ConnectionId { id4, 0, id5, 0 });
 
         NodeId id6 = graphModel->addNode(FlowReportData().type().id);
-        graphModel->setNodeData(id6, NodeRole::Position, QPointF(h * 2, 200));
+        graphModel->setNodeData(id6, NodeRole::Position, QPointF(0, h * 5));
         graphModel->addConnection(ConnectionId { id5, 0, id6, 0 });
         break;
     }
     case ProjectManager::OptimalIndex: {
         NodeId id1 = graphModel->addNode(FlowIndexData().type().id);
-        graphModel->setNodeData(id1, NodeRole::Position, QPointF(h * 0, 0));
+        graphModel->setNodeData(id1, NodeRole::Position, QPointF(0, h * 0));
 
         NodeId id2 = graphModel->addNode(FlowSampleData().type().id);
-        graphModel->setNodeData(id2, NodeRole::Position, QPointF(h * 1, 0));
+        graphModel->setNodeData(id2, NodeRole::Position, QPointF(0, h * 1));
         graphModel->addConnection(ConnectionId { id1, 0, id2, 0 });
 
         NodeId id8 = graphModel->addNode(FlowSchemeData().type().id);
-        graphModel->setNodeData(id8, NodeRole::Position, QPointF(h * 2, 0));
+        graphModel->setNodeData(id8, NodeRole::Position, QPointF(0, h * 2));
         graphModel->addConnection(ConnectionId { id2, 0, id8, 0 });
 
         NodeId id5 = graphModel->addNode(FlowResultData().type().id);
-        graphModel->setNodeData(id5, NodeRole::Position, QPointF(h * 0, 200));
+        graphModel->setNodeData(id5, NodeRole::Position, QPointF(0, h * 3));
         graphModel->addConnection(ConnectionId { id8, 0, id5, 0 });
 
         NodeId id6 = graphModel->addNode(FlowReportData().type().id);
-        graphModel->setNodeData(id6, NodeRole::Position, QPointF(h * 1, 200));
+        graphModel->setNodeData(id6, NodeRole::Position, QPointF(0, h * 4));
         graphModel->addConnection(ConnectionId { id5, 0, id6, 0 });
         break;
     }
     case ProjectManager::EfficiencyIndex: {
         NodeId id1 = graphModel->addNode(FlowIndexData().type().id);
-        graphModel->setNodeData(id1, NodeRole::Position, QPointF(h * 0, 0));
+        graphModel->setNodeData(id1, NodeRole::Position, QPointF(0, h * 0));
 
         NodeId id7 = graphModel->addNode(FlowEffiLevData().type().id);
-        graphModel->setNodeData(id7, NodeRole::Position, QPointF(h * 1, 0));
+        graphModel->setNodeData(id7, NodeRole::Position, QPointF(0, h * 1));
         graphModel->addConnection(ConnectionId { id1, 0, id7, 0 });
 
         NodeId id9 = graphModel->addNode(FlowEffiData().type().id);
-        graphModel->setNodeData(id9, NodeRole::Position, QPointF(h * 2, 0));
+        graphModel->setNodeData(id9, NodeRole::Position, QPointF(0, h * 2));
         graphModel->addConnection(ConnectionId { id7, 0, id9, 0 });
 
         NodeId id5 = graphModel->addNode(FlowResultData().type().id);
-        graphModel->setNodeData(id5, NodeRole::Position, QPointF(h * 0, 200));
+        graphModel->setNodeData(id5, NodeRole::Position, QPointF(0, h * 3));
         graphModel->addConnection(ConnectionId { id9, 0, id5, 0 });
 
         NodeId id6 = graphModel->addNode(FlowReportData().type().id);
-        graphModel->setNodeData(id6, NodeRole::Position, QPointF(h * 1, 200));
+        graphModel->setNodeData(id6, NodeRole::Position, QPointF(0, h * 4));
         graphModel->addConnection(ConnectionId { id5, 0, id6, 0 });
         break;
     }

+ 1 - 0
QtNodes/src/DataFlowGraphModel.cpp

@@ -178,6 +178,7 @@ QVariant DataFlowGraphModel::nodeData(NodeId nodeId, NodeRole role) const
 
     case NodeRole::Caption:
         result = model->caption();
+        //        result = _captionData[nodeId];
         break;
 
     case NodeRole::Style: {

+ 38 - 46
QtNodes/src/DefaultNodePainter.cpp

@@ -1,4 +1,4 @@
-#include "DefaultNodePainter.hpp"
+#include "DefaultNodePainter.hpp"
 
 #include <cmath>
 
@@ -18,14 +18,14 @@ namespace QtNodes {
 void DefaultNodePainter::paint(QPainter *painter, NodeGraphicsObject &ngo) const
 {
     // TODO?
-    //AbstractNodeGeometry & geometry = ngo.nodeScene()->nodeGeometry();
-    //geometry.recomputeSizeIfFontChanged(painter->font());
+    // AbstractNodeGeometry & geometry = ngo.nodeScene()->nodeGeometry();
+    // geometry.recomputeSizeIfFontChanged(painter->font());
 
     drawNodeRect(painter, ngo);
 
-    drawConnectionPoints(painter, ngo);
+    //    drawConnectionPoints(painter, ngo);
 
-    drawFilledConnectionPoints(painter, ngo);
+    //    drawFilledConnectionPoints(painter, ngo);
 
     drawNodeCaption(painter, ngo);
 
@@ -76,8 +76,8 @@ void DefaultNodePainter::drawNodeRect(QPainter *painter, NodeGraphicsObject &ngo
 
 void DefaultNodePainter::drawConnectionPoints(QPainter *painter, NodeGraphicsObject &ngo) const
 {
-    AbstractGraphModel &model = ngo.graphModel();
-    NodeId const nodeId = ngo.nodeId();
+    AbstractGraphModel &model      = ngo.graphModel();
+    NodeId const nodeId            = ngo.nodeId();
     AbstractNodeGeometry &geometry = ngo.nodeScene()->nodeGeometry();
 
     QJsonDocument json = QJsonDocument::fromVariant(model.nodeData(nodeId, NodeRole::Style));
@@ -85,21 +85,19 @@ void DefaultNodePainter::drawConnectionPoints(QPainter *painter, NodeGraphicsObj
 
     auto const &connectionStyle = StyleCollection::connectionStyle();
 
-    float diameter = nodeStyle.ConnectionPointDiameter;
+    float diameter       = nodeStyle.ConnectionPointDiameter;
     auto reducedDiameter = diameter * 0.6;
 
-    for (PortType portType : {PortType::Out, PortType::In}) {
-        size_t const n = model
-                             .nodeData(nodeId,
-                                       (portType == PortType::Out) ? NodeRole::OutPortCount
-                                                                   : NodeRole::InPortCount)
-                             .toUInt();
+    for (PortType portType : { PortType::Out, PortType::In }) {
+        size_t const n =
+                model.nodeData(nodeId, (portType == PortType::Out) ? NodeRole::OutPortCount : NodeRole::InPortCount)
+                        .toUInt();
 
         for (PortIndex portIndex = 0; portIndex < n; ++portIndex) {
             QPointF p = geometry.portPosition(nodeId, portType, portIndex);
 
-            auto const &dataType = model.portData(nodeId, portType, portIndex, PortRole::DataType)
-                                       .value<NodeDataType>();
+            auto const &dataType =
+                    model.portData(nodeId, portType, portIndex, PortRole::DataType).value<NodeDataType>();
 
             double r = 1.0;
 
@@ -109,24 +107,23 @@ void DefaultNodePainter::drawConnectionPoints(QPainter *painter, NodeGraphicsObj
                 PortType requiredPort = cgo->connectionState().requiredPort();
 
                 if (requiredPort == portType) {
-                    ConnectionId possibleConnectionId = makeCompleteConnectionId(cgo->connectionId(),
-                                                                                 nodeId,
-                                                                                 portIndex);
+                    ConnectionId possibleConnectionId =
+                            makeCompleteConnectionId(cgo->connectionId(), nodeId, portIndex);
 
                     bool const possible = model.connectionPossible(possibleConnectionId);
 
                     auto cp = cgo->sceneTransform().map(cgo->endPoint(requiredPort));
-                    cp = ngo.sceneTransform().inverted().map(cp);
+                    cp      = ngo.sceneTransform().inverted().map(cp);
 
-                    auto diff = cp - p;
+                    auto diff   = cp - p;
                     double dist = std::sqrt(QPointF::dotProduct(diff, diff));
 
                     if (possible) {
                         double const thres = 40.0;
-                        r = (dist < thres) ? (2.0 - dist / thres) : 1.0;
+                        r                  = (dist < thres) ? (2.0 - dist / thres) : 1.0;
                     } else {
                         double const thres = 80.0;
-                        r = (dist < thres) ? (dist / thres) : 1.0;
+                        r                  = (dist < thres) ? (dist / thres) : 1.0;
                     }
                 }
             }
@@ -148,8 +145,8 @@ void DefaultNodePainter::drawConnectionPoints(QPainter *painter, NodeGraphicsObj
 
 void DefaultNodePainter::drawFilledConnectionPoints(QPainter *painter, NodeGraphicsObject &ngo) const
 {
-    AbstractGraphModel &model = ngo.graphModel();
-    NodeId const nodeId = ngo.nodeId();
+    AbstractGraphModel &model      = ngo.graphModel();
+    NodeId const nodeId            = ngo.nodeId();
     AbstractNodeGeometry &geometry = ngo.nodeScene()->nodeGeometry();
 
     QJsonDocument json = QJsonDocument::fromVariant(model.nodeData(nodeId, NodeRole::Style));
@@ -157,12 +154,10 @@ void DefaultNodePainter::drawFilledConnectionPoints(QPainter *painter, NodeGraph
 
     auto diameter = nodeStyle.ConnectionPointDiameter;
 
-    for (PortType portType : {PortType::Out, PortType::In}) {
-        size_t const n = model
-                             .nodeData(nodeId,
-                                       (portType == PortType::Out) ? NodeRole::OutPortCount
-                                                                   : NodeRole::InPortCount)
-                             .toUInt();
+    for (PortType portType : { PortType::Out, PortType::In }) {
+        size_t const n =
+                model.nodeData(nodeId, (portType == PortType::Out) ? NodeRole::OutPortCount : NodeRole::InPortCount)
+                        .toUInt();
 
         for (PortIndex portIndex = 0; portIndex < n; ++portIndex) {
             QPointF p = geometry.portPosition(nodeId, portType, portIndex);
@@ -170,9 +165,8 @@ void DefaultNodePainter::drawFilledConnectionPoints(QPainter *painter, NodeGraph
             auto const &connected = model.connections(nodeId, portType, portIndex);
 
             if (!connected.empty()) {
-                auto const &dataType = model
-                                           .portData(nodeId, portType, portIndex, PortRole::DataType)
-                                           .value<NodeDataType>();
+                auto const &dataType =
+                        model.portData(nodeId, portType, portIndex, PortRole::DataType).value<NodeDataType>();
 
                 auto const &connectionStyle = StyleCollection::connectionStyle();
                 if (connectionStyle.useDataDefinedColors()) {
@@ -192,8 +186,8 @@ void DefaultNodePainter::drawFilledConnectionPoints(QPainter *painter, NodeGraph
 
 void DefaultNodePainter::drawNodeCaption(QPainter *painter, NodeGraphicsObject &ngo) const
 {
-    AbstractGraphModel &model = ngo.graphModel();
-    NodeId const nodeId = ngo.nodeId();
+    AbstractGraphModel &model      = ngo.graphModel();
+    NodeId const nodeId            = ngo.nodeId();
     AbstractNodeGeometry &geometry = ngo.nodeScene()->nodeGeometry();
 
     if (!model.nodeData(nodeId, NodeRole::CaptionVisible).toBool())
@@ -219,18 +213,16 @@ void DefaultNodePainter::drawNodeCaption(QPainter *painter, NodeGraphicsObject &
 
 void DefaultNodePainter::drawEntryLabels(QPainter *painter, NodeGraphicsObject &ngo) const
 {
-    AbstractGraphModel &model = ngo.graphModel();
-    NodeId const nodeId = ngo.nodeId();
+    AbstractGraphModel &model      = ngo.graphModel();
+    NodeId const nodeId            = ngo.nodeId();
     AbstractNodeGeometry &geometry = ngo.nodeScene()->nodeGeometry();
 
     QJsonDocument json = QJsonDocument::fromVariant(model.nodeData(nodeId, NodeRole::Style));
     NodeStyle nodeStyle(json.object());
 
-    for (PortType portType : {PortType::Out, PortType::In}) {
-        unsigned int n = model.nodeData<unsigned int>(nodeId,
-                                                      (portType == PortType::Out)
-                                                          ? NodeRole::OutPortCount
-                                                          : NodeRole::InPortCount);
+    for (PortType portType : { PortType::Out, PortType::In }) {
+        unsigned int n = model.nodeData<unsigned int>(
+                nodeId, (portType == PortType::Out) ? NodeRole::OutPortCount : NodeRole::InPortCount);
 
         for (PortIndex portIndex = 0; portIndex < n; ++portIndex) {
             auto const &connected = model.connections(nodeId, portType, portIndex);
@@ -259,8 +251,8 @@ void DefaultNodePainter::drawEntryLabels(QPainter *painter, NodeGraphicsObject &
 
 void DefaultNodePainter::drawResizeRect(QPainter *painter, NodeGraphicsObject &ngo) const
 {
-    AbstractGraphModel &model = ngo.graphModel();
-    NodeId const nodeId = ngo.nodeId();
+    AbstractGraphModel &model      = ngo.graphModel();
+    NodeId const nodeId            = ngo.nodeId();
     AbstractNodeGeometry &geometry = ngo.nodeScene()->nodeGeometry();
 
     if (model.nodeFlags(nodeId) & NodeFlag::Resizable) {
@@ -270,4 +262,4 @@ void DefaultNodePainter::drawResizeRect(QPainter *painter, NodeGraphicsObject &n
     }
 }
 
-} // namespace QtNodes
+}  // namespace QtNodes