DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DANodeGraphicsScene.h
1#ifndef DANODEGRAPHICSSCENE_H
2#define DANODEGRAPHICSSCENE_H
3#include <QtCore/qglobal.h>
4#include <QImage>
5#include "DANodeMetaData.h"
6#include "DAWorkFlowAPI.h"
7#include "DAGraphicsScene.h"
8#include "DAAbstractNodeGraphicsItem.h"
9#include "DAAbstractNodeLinkGraphicsItem.h"
10#include "DAWorkFlow.h"
11
12class QGraphicsSceneMouseEvent;
13namespace DA
14{
15class DAGraphicsPixmapItem;
16class DAGraphicsRectItem;
17class DAGraphicsStandardTextItem;
18class DAGraphicsTextItem;
24class DAWORKFLOW_API DANodeGraphicsScene : public DAGraphicsScene
25{
26 Q_OBJECT
27 DA_DECLARE_PRIVATE(DANodeGraphicsScene)
28 friend class DAAbstractNodeGraphicsItem;
30
31public:
32 DANodeGraphicsScene(QObject* p = nullptr);
33 DANodeGraphicsScene(const QRectF& sceneRect, QObject* p = nullptr);
34 DANodeGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject* p = nullptr);
36
37 // 取消链接
38 virtual void cancelLink() override;
39
40 // 设置工作流
41 void setWorkFlow(DAWorkFlow* wf);
42 DAWorkFlow* getWorkflow();
43
44 // 通过node找到item,时间复杂度<O(n)
46
47 // 获取选中的NodeGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个
48 DAAbstractNodeGraphicsItem* getSelectedNodeGraphicsItem() const;
49
50 // 获取所有的graphicsitem
51 QList< DAAbstractNodeGraphicsItem* > getNodeGraphicsItems() const;
52
53 // 获取所有的DAAbstractNodeGraphicsItem
54 QList< DAGraphicsStandardTextItem* > getTextGraphicsItems() const;
55
56 // 获取选中的NodeGraphicsItem,如果没有返回一个空list
57 QList< DAAbstractNodeGraphicsItem* > getSelectedNodeGraphicsItems() const;
58
59 // 获取选中的NodeLinkGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个
60 DAAbstractNodeLinkGraphicsItem* getSelectedNodeLinkGraphicsItem() const;
61
62 // 获取选中的NodeLinkGraphicsItem,如果没有返回一个空list
63 QList< DAAbstractNodeLinkGraphicsItem* > getSelectedNodeLinkGraphicsItems() const;
64
65 // 获取除了连接线以外的item
66 QList< QGraphicsItem* > getGraphicsItemsWithoutLink() const;
67
68 // 删除选中的item,此函数支持redo/undo,返回删除的数量
69 int removeSelectedItems_();
70 // 带redo/undo的节点item删除,此操作会顺带删除节点对应的连接线,避免悬空连接线
71 void removeNodeItem_(DAAbstractNodeGraphicsItem* i);
72 // 带redo/undo的节点item的添加,此函数适用于自己通过factory创建node,然后用node创建item,再加入场景中
73 void addNodeItem_(DAAbstractNodeGraphicsItem* i);
74 // 添加带redo/undo的链接线
75 void addNodeLink_(DAAbstractNodeLinkGraphicsItem* link);
76 // 通过node元对象创建工作流节点,(item没有设置到场景中)
77 DAAbstractNodeGraphicsItem* createNode(const DANodeMetaData& md, const QPointF& pos, bool addItemToScene = true);
78 // 创建节点同时把item设置到场景中
79 DAAbstractNodeGraphicsItem* createNode_(const DANodeMetaData& md, const QPointF& pos);
80
81 // 添加一个图片item
82 DAGraphicsPixmapItem* addPixmapItem_(const QImage& img);
83 // 通过位置获取DAAbstractNodeGraphicsItem,此函数是加强版的itemAt
84 DAAbstractNodeGraphicsItem* nodeItemAt(const QPointF& scenePos) const;
85signals:
86
93 const DA::DANodeLinkPoint& lp,
94 QGraphicsSceneMouseEvent* event);
95
100
106
112
120 void nodeItemsRemoved(const QList< DA::DAAbstractNodeGraphicsItem* >& items);
121
129 void nodeLinksRemoved(const QList< DA::DAAbstractNodeLinkGraphicsItem* >& items);
130
131protected slots:
132 void onSelectItemChanged(DAGraphicsItem* item);
133 void onSelectLinkChanged(DAGraphicsLinkItem* item);
134 // item选择改变
135 // void onItemSelectionChanged();
136
137 // node的名字改变
138 void onNodeNameChanged(DAAbstractNode::SharedPointer node, const QString& oldName, const QString& newName);
139
140protected:
141 // 鼠标点击事件
142 void mousePressEvent(QGraphicsSceneMouseEvent* mouseEvent) override;
143
144 // itemlink都没用节点连接时会调用这个函数,发出
145 void callNodeItemLinkIsEmpty(DAAbstractNodeLinkGraphicsItem* link);
146
147 // 对item进行分类
148 static void classifyItems(const QList< QGraphicsItem* >& sourceItems,
149 QList< DAAbstractNodeGraphicsItem* >& nodeItems,
150 QList< DAAbstractNodeLinkGraphicsItem* >& linkItems,
151 QList< QGraphicsItem* >& normalItem);
152 // 获取node item的所有连接线
153 static QList< DAAbstractNodeLinkGraphicsItem* > getNodesAllLinkItems(const QList< DAAbstractNodeGraphicsItem* >& nodeItems);
154 // 所有节点item对应的node
155 static QList< DAAbstractNode::SharedPointer > nodeItemsToNodes(const QList< DAAbstractNodeGraphicsItem* >& nodeItems);
156
157private:
158 void initConnect();
159};
160}
161#endif // FCNODEGRAPHICSSCENE_H
这是节点的基类,workflow所有节点都继承此类 作为一个节点的QGraphicsItem,此item应该由DAAbstractNode创建
Definition DAAbstractNodeGraphicsItem.h:47
绘制连接线的item
Definition DAAbstractNodeLinkGraphicsItem.h:20
节点对应的基类
Definition DAAbstractNode.h:50
DAGraphicsView的基本元件
Definition DAGraphicsItem.h:19
绘制连接线的item
Definition DAGraphicsLinkItem.h:16
支持缩放编辑的图片item
Definition DAGraphicsPixmapItem.h:13
这是带着undostack的GraphicsScene 此QGraphicsScene支持:
Definition DAGraphicsScene.h:30
DAAbstractNodeGraphicsItem对应的QGraphicsScene,通过此scene,管理DAWorkFlow内容
Definition DANodeGraphicsScene.h:25
void selectNodeLinkChanged(DA::DAAbstractNodeLinkGraphicsItem *link)
选中了某个节点的设置窗口
void nodeLinksRemoved(const QList< DA::DAAbstractNodeLinkGraphicsItem * > &items)
连接线被移除
void nodeItemLinkPointSelected(DA::DAAbstractNodeGraphicsItem *item, const DA::DANodeLinkPoint &lp, QGraphicsSceneMouseEvent *event)
节点的连接点被选中触发的信号
void nodeItemsRemoved(const QList< DA::DAAbstractNodeGraphicsItem * > &items)
节点被移除
void nodeLinkItemIsEmpty(DA::DAAbstractNodeLinkGraphicsItem *link)
说明link已经为空,这时会自动remove
void selectNodeItemChanged(DA::DAAbstractNodeGraphicsItem *item)
选中了某个节点的设置窗口
用于表征连节点信息的数据
Definition DANodeLinkPoint.h:13
保存节点元数据 节点元数据由工厂进行管理
Definition DANodeMetaData.h:16
基本的工作流,这个也是总工厂,汇总了所有插件的工厂
Definition DAWorkFlow.h:21
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44