DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
DA::DANodeGraphicsScene类 参考

DAAbstractNodeGraphicsItem对应的QGraphicsScene,通过此scene,管理DAWorkFlow内容 更多...

#include <DANodeGraphicsScene.h>

类 DA::DANodeGraphicsScene 继承关系图:
DA::DAGraphicsScene DA::DAWorkFlowGraphicsScene

class  PrivateData
 

信号

void nodeItemLinkPointSelected (DA::DAAbstractNodeGraphicsItem *item, const DA::DANodeLinkPoint &lp, QGraphicsSceneMouseEvent *event)
 节点的连接点被选中触发的信号
 
void nodeLinkItemIsEmpty (DA::DAAbstractNodeLinkGraphicsItem *link)
 说明link已经为空,这时会自动remove
 
void selectNodeItemChanged (DA::DAAbstractNodeGraphicsItem *item)
 选中了某个节点的设置窗口
 
void selectNodeLinkChanged (DA::DAAbstractNodeLinkGraphicsItem *link)
 选中了某个节点的设置窗口
 
void nodeItemsRemoved (const QList< DA::DAAbstractNodeGraphicsItem * > &items)
 节点被移除
 
void nodeLinksRemoved (const QList< DA::DAAbstractNodeLinkGraphicsItem * > &items)
 连接线被移除
 
- 信号 继承自 DA::DAGraphicsScene
void itemsPositionChanged (const QList< QGraphicsItem * > &items, const QList< QPointF > &oldPos, const QList< QPointF > &newPos)
 item移动发射的信号
 
void itemBodySizeChanged (DAGraphicsResizeableItem *item, const QSizeF &oldSize, const QSizeF &newSize)
 条目bodysize改变触发的信号
 
void itemRotationChanged (DAGraphicsResizeableItem *item, const qreal &rotation)
 item旋转发出的信号
 
void linkCompleted (DAGraphicsLinkItem *linkItem)
 完成了一次链接
 
void selectItemChanged (DAGraphicsItem *item)
 选中的item发生了变化,注意,选中的如果是分组,会检查分组内部的item的点击,最终也是发送被点击的item
 
void selectLinkChanged (DAGraphicsLinkItem *item)
 选中的链接线发生了改变
 
void itemsAdded (const QList< QGraphicsItem * > &its)
 item添加的信号
 
void itemsRemoved (const QList< QGraphicsItem * > &its)
 item移除的信号
 
void sceneActionActived (DA::DAAbstractGraphicsSceneAction *act)
 一个场景动作被激活的信号
 
void sceneActionDeactived (DA::DAAbstractGraphicsSceneAction *act)
 一个场景动作已经解除激活的信号
 

Public 成员函数

 DANodeGraphicsScene (QObject *p=nullptr)
 DANodeGraphicsScene
 
 DANodeGraphicsScene (const QRectF &sceneRect, QObject *p=nullptr)
 
 DANodeGraphicsScene (qreal x, qreal y, qreal width, qreal height, QObject *p=nullptr)
 
virtual void cancelLink () override
 取消链接,如果此时没在进行链接,不做处理
 
void setWorkFlow (DAWorkFlow *wf)
 设置工作流
 
DAWorkFlowgetWorkflow ()
 获取工作流
 
DAAbstractNodeGraphicsItemfindItemByNode (DAAbstractNode *n)
 通过node找到item
 
DAAbstractNodeGraphicsItemgetSelectedNodeGraphicsItem () const
 获取选中的NodeGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个
 
QList< DAAbstractNodeGraphicsItem * > getNodeGraphicsItems () const
 获取所有的NodeGraphicsItems
 
QList< DAGraphicsStandardTextItem * > getTextGraphicsItems () const
 获取所有的文本
 
QList< DAAbstractNodeGraphicsItem * > getSelectedNodeGraphicsItems () const
 获取选中的NodeGraphicsItem,如果没有返回一个空list
 
DAAbstractNodeLinkGraphicsItemgetSelectedNodeLinkGraphicsItem () const
 获取选中的NodeLinkGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个
 
QList< DAAbstractNodeLinkGraphicsItem * > getSelectedNodeLinkGraphicsItems () const
 
QList< QGraphicsItem * > getGraphicsItemsWithoutLink () const
 获取除了连接线以外的item
 
int removeSelectedItems_ ()
 删除选中的item,此函数支持redo/undo
 
void removeNodeItem_ (DAAbstractNodeGraphicsItem *i)
 
void addNodeItem_ (DAAbstractNodeGraphicsItem *i)
 
void addNodeLink_ (DAAbstractNodeLinkGraphicsItem *link)
 
DAAbstractNodeGraphicsItemcreateNode (const DANodeMetaData &md, const QPointF &pos, bool addItemToScene=true)
 创建节点(不带回退功能)
 
DAAbstractNodeGraphicsItemcreateNode_ (const DANodeMetaData &md, const QPointF &pos)
 通过node元对象创建工作流节点
 
DAGraphicsPixmapItemaddPixmapItem_ (const QImage &img)
 添加一个图片item
 
DAAbstractNodeGraphicsItemnodeItemAt (const QPointF &scenePos) const
 通过位置获取DAAbstractNodeGraphicsItem
 
- Public 成员函数 继承自 DA::DAGraphicsScene
 DAGraphicsScene (QObject *p=nullptr)
 
 DAGraphicsScene (const QRectF &sceneRect, QObject *p=nullptr)
 
 DAGraphicsScene (qreal x, qreal y, qreal width, qreal height, QObject *p=nullptr)
 
QPointF getCurrentMouseScenePos () const
 获取当前鼠标在scene的位置
 
QPointF getLastMousePressScenePos () const
 获取最后鼠标在scene点击的位置
 
QList< QGraphicsItem * > getSelectedMovableItems ()
 获取选中且能移动的item
 
QUndoCommand * addItem_ (QGraphicsItem *item)
 等同additem,但使用redo/undo来添加,可以进行redo/undo操作
 
QUndoCommand * addItems_ (const QList< QGraphicsItem * > &its)
 等同多次additem,但使用redo/undo来添加,可以进行redo/undo操作
 
QUndoCommand * removeItem_ (QGraphicsItem *item)
 等同removeItem,但使用redo/undo来添加,可以进行redo/undo操作
 
QUndoCommand * removeItems_ (const QList< QGraphicsItem * > &its)
 
QPixmap toPixamp (int dpi=0)
 导出为pixmap
 
QImage toImage (int dpi=0)
 转换为设备相关的图片
 
void beginLink (DAGraphicsLinkItem *linkItem, LinkMode lm=LinkModeAutoStartEndFollowMouseClick)
 开始链接模式
 
bool isStartLink () const
 判断当前是否是链接模式
 
void endLink ()
 结束链接模式
 
virtual void cancel ()
 
DAGraphicsLinkItemgetCurrentLinkItem () const
 获取当前正在进行连线的连接线item
 
void setIgnoreLinkEvent (bool on)
 设置忽略链接事件的处理,主要忽略mousePressEvent,mouseMoveEvent的链接事件
 
bool isIgnoreLinkEvent () const
 判断当前是否忽略链接事件
 
void groupingSelectItems_ ()
 对选中item的分组
 
void removeSelectItemGroup_ ()
 移除选中的分组
 
bool isEnableSnapToGrid () const
 是否允许对齐网格
 
bool isShowGridLine ()
 是否显示网格线
 
void setGridSize (const QSize &gs)
 设置网格尺寸
 
QSize getGridSize () const
 网格尺寸
 
void setGridLinePen (const QPen &p)
 设置网格画笔
 
QPen getGridLinePen () const
 获取网格画笔
 
void setPaintBackgroundInCache (bool on)
 设置绘制背景使用缓冲
 
bool isPaintBackgroundInCache () const
 是否绘制背景使用缓冲
 
QUndoStack & undoStack ()
 获取DANodeGraphicsScene内部维护的undoStack
 
const QUndoStack & undoStack () const
 
QUndoStack * getUndoStack () const
 获取undostack指针
 
void setUndoStackActive ()
 在StackGroup中激活undoStack
 
void push (QUndoCommand *cmd)
 等同s->undoStack().push(cmd);
 
QGraphicsItem * findItemByID (uint64_t id, bool recursion=false) const
 通过id查找item,此函数性能为O(n)
 
QList< QGraphicsItem * > topItems () const
 
QList< QGraphicsItem * > topItems (const QPointF &scenePos) const
 
QList< DAGraphicsItem * > selectedDAItems () const
 获取选中的da item
 
void setReady (bool on)
 设置场景就绪
 
bool isReady () const
 场景是否就绪
 
bool isHaveSceneAction () const
 判断当前是否存在场景动作
 
QList< DAGraphicsLayout * > getLayouts () const
 获取所有图层
 
bool isReadOnly () const
 
DAGraphicsTextItemcreateText_ (const QString &str=QString())
 创建并加入一个文本框
 
DAGraphicsRectItemcreateRect_ (const QPointF &p=QPointF())
 在画布中创建一个矩形
 
void registCommandsFactory (DAGraphicsCommandsFactory *fac)
 注册命令工厂
 
DAGraphicsCommandsFactorycommandsFactory ()
 命令工厂
 
virtual bool isItemCanMove (QGraphicsItem *positem, const QPointF &scenePos)
 判断点击的item是否可以移动
 

Protected 槽

void onSelectItemChanged (DAGraphicsItem *item)
 item选择改变
 
void onSelectLinkChanged (DAGraphicsLinkItem *item)
 
void onNodeNameChanged (DAAbstractNode::SharedPointer node, const QString &oldName, const QString &newName)
 节点名字改变触发的槽
 

Protected 成员函数

void mousePressEvent (QGraphicsSceneMouseEvent *mouseEvent) override
 
void callNodeItemLinkIsEmpty (DAAbstractNodeLinkGraphicsItem *link)
 itemlink都没用节点连接时会调用这个函数,发出
 
- Protected 成员函数 继承自 DA::DAGraphicsScene
void emitItemsPositionChanged (const QList< QGraphicsItem * > &items, const QList< QPointF > &oldPos, const QList< QPointF > &newPos)
 调用此函数 主动触发itemsPositionChanged信号,这个函数用于 继承此类例如实现了键盘移动item,主动触发此信号
 
void emitItemBodySizeChanged (DAGraphicsResizeableItem *item, const QSizeF &oldSize, const QSizeF &newSize)
 调用此函数 主动触发itemBodySizeChanged信号
 
void emitItemRotationChanged (DAGraphicsResizeableItem *item, const qreal &rotation)
 调用此函数 主动触发itemRotationed信号
 
void addItemWithSignal (QGraphicsItem *item)
 带信号的addItm
 
void mousePressEvent (QGraphicsSceneMouseEvent *mouseEvent) override
 
void mouseMoveEvent (QGraphicsSceneMouseEvent *mouseEvent) override
 
void mouseReleaseEvent (QGraphicsSceneMouseEvent *mouseEvent) override
 
void drawBackground (QPainter *painter, const QRectF &rect) override
 

静态 Protected 成员函数

static void classifyItems (const QList< QGraphicsItem * > &sourceItems, QList< DAAbstractNodeGraphicsItem * > &nodeItems, QList< DAAbstractNodeLinkGraphicsItem * > &linkItems, QList< QGraphicsItem * > &normalItem)
 对item进行分类
 
static QList< DAAbstractNodeLinkGraphicsItem * > getNodesAllLinkItems (const QList< DAAbstractNodeGraphicsItem * > &nodeItems)
 获取node item的所有连接线
 
static QList< DAAbstractNode::SharedPointer > nodeItemsToNodes (const QList< DAAbstractNodeGraphicsItem * > &nodeItems)
 所有节点item对应的node
 

友元

class DAAbstractNodeGraphicsItem
 
class DAAbstractNodeLinkGraphicsItem
 

额外继承的成员函数

- Public 类型 继承自 DA::DAGraphicsScene
enum  LinkMode { LinkModeAutoStartEndFollowMouseClick }
 链接模式 更多...
 
- Public 槽 继承自 DA::DAGraphicsScene
void setEnableSnapToGrid (bool on=true)
 是否允许对齐网格
 
void showGridLine (bool on)
 显示网格线
 
int selectAll ()
 选中所有item
 
int unselectAll ()
 取消选择,把所有item设置为非选中状态
 
void clearSelection ()
 取消选中item
 
int setSelectionState (const QList< QGraphicsItem * > &its, bool isSelect)
 设置item的选中状态
 
void setReadOnly (bool on)
 设定为只读模式
 
void setupSceneAction (DA::DAAbstractGraphicsSceneAction *act)
 激活场景动作
 
void clearSceneAction ()
 清除场景动作
 
- 静态 Public 成员函数 继承自 DA::DAGraphicsScene
static QGraphicsItem * findItemByID (const QList< QGraphicsItem * > &its, uint64_t id, bool recursion=false)
 查找id对应的GraphicsItem*
 
static int getDefaultDPI ()
 获取默认的dpi
 
static int dpiToPx (int dpi, int r)
 dpi转为像素
 
static void addItemToGroup (QGraphicsItemGroup *group, const QList< QGraphicsItem * > &willGroupItems)
 通用的item分组,此操作和QGraphicsScene::createItemGroup逻辑一致
 

详细描述

DAAbstractNodeGraphicsItem对应的QGraphicsScene,通过此scene,管理DAWorkFlow内容

注解
所有支持redo/undo的函数后面都会带有_下标

成员函数说明

◆ addPixmapItem_()

DAGraphicsPixmapItem * DA::DANodeGraphicsScene::addPixmapItem_ ( const QImage &  img)

添加一个图片item

参数
img
返回

◆ callNodeItemLinkIsEmpty()

void DA::DANodeGraphicsScene::callNodeItemLinkIsEmpty ( DAAbstractNodeLinkGraphicsItem link)
protected

itemlink都没用节点连接时会调用这个函数,发出

参数
link

◆ cancelLink()

void DA::DANodeGraphicsScene::cancelLink ( )
overridevirtual

取消链接,如果此时没在进行链接,不做处理

重载 DA::DAGraphicsScene .

◆ classifyItems()

void DA::DANodeGraphicsScene::classifyItems ( const QList< QGraphicsItem * > &  sourceItems,
QList< DAAbstractNodeGraphicsItem * > &  nodeItems,
QList< DAAbstractNodeLinkGraphicsItem * > &  linkItems,
QList< QGraphicsItem * > &  normalItem 
)
staticprotected

对item进行分类

参数
sourceItems
nodeItems
linkItems
normalItem

◆ createNode()

DAAbstractNodeGraphicsItem * DA::DANodeGraphicsScene::createNode ( const DANodeMetaData md,
const QPointF &  pos,
bool  addItemToScene = true 
)

创建节点(不带回退功能)

注解
注意,节点会记录在工作流中,如果返回的是nullptr,则不会记录
参数
md
pos
addItemToScene控制是否创建节点对应的item加入场景中,默认为true
返回
返回节点对应的item,注意此item会加入场景中

◆ createNode_()

DAAbstractNodeGraphicsItem * DA::DANodeGraphicsScene::createNode_ ( const DANodeMetaData md,
const QPointF &  pos 
)

通过node元对象创建工作流节点

参数
md
返回
如果创建失败,返回nullptr

◆ findItemByNode()

DAAbstractNodeGraphicsItem * DA::DANodeGraphicsScene::findItemByNode ( DAAbstractNode n)

通过node找到item

参数
n
返回

◆ getGraphicsItemsWithoutLink()

QList< QGraphicsItem * > DA::DANodeGraphicsScene::getGraphicsItemsWithoutLink ( ) const

获取除了连接线以外的item

返回

◆ getNodeGraphicsItems()

QList< DAAbstractNodeGraphicsItem * > DA::DANodeGraphicsScene::getNodeGraphicsItems ( ) const

获取所有的NodeGraphicsItems

返回

◆ getNodesAllLinkItems()

QList< DAAbstractNodeLinkGraphicsItem * > DA::DANodeGraphicsScene::getNodesAllLinkItems ( const QList< DAAbstractNodeGraphicsItem * > &  nodeItems)
staticprotected

获取node item的所有连接线

参数
nodeItems
返回
注意返回的是无序的

◆ getSelectedNodeGraphicsItem()

DAAbstractNodeGraphicsItem * DA::DANodeGraphicsScene::getSelectedNodeGraphicsItem ( ) const

获取选中的NodeGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个

返回

◆ getSelectedNodeGraphicsItems()

QList< DAAbstractNodeGraphicsItem * > DA::DANodeGraphicsScene::getSelectedNodeGraphicsItems ( ) const

获取选中的NodeGraphicsItem,如果没有返回一个空list

返回

◆ getSelectedNodeLinkGraphicsItem()

DAAbstractNodeLinkGraphicsItem * DA::DANodeGraphicsScene::getSelectedNodeLinkGraphicsItem ( ) const

获取选中的NodeLinkGraphicsItem,如果没有返回nullptr,如果选中多个,返回第一个

返回

◆ getTextGraphicsItems()

QList< DAGraphicsStandardTextItem * > DA::DANodeGraphicsScene::getTextGraphicsItems ( ) const

获取所有的文本

返回
参见
createText_

◆ getWorkflow()

DAWorkFlow * DA::DANodeGraphicsScene::getWorkflow ( )

获取工作流

返回

◆ mousePressEvent()

void DA::DANodeGraphicsScene::mousePressEvent ( QGraphicsSceneMouseEvent *  mouseEvent)
overrideprotected

说明没有点击到连接点,正常传递到DAGraphicsSceneWithUndoStack DAGraphicsSceneWithUndoStack的连线在这时候就结束,但这里并不想结束, 因此需要调用setIgnoreLinkEvent忽略掉链接模式的事件

记录到redo/undo中

◆ nodeItemAt()

DAAbstractNodeGraphicsItem * DA::DANodeGraphicsScene::nodeItemAt ( const QPointF &  scenePos) const

通过位置获取DAAbstractNodeGraphicsItem

此函数是加强版的itemAt

参数
scenePos
返回

◆ nodeItemLinkPointSelected

void DA::DANodeGraphicsScene::nodeItemLinkPointSelected ( DA::DAAbstractNodeGraphicsItem item,
const DA::DANodeLinkPoint lp,
QGraphicsSceneMouseEvent *  event 
)
signal

节点的连接点被选中触发的信号

参数
item节点item
lp连接点

◆ nodeItemsRemoved

void DA::DANodeGraphicsScene::nodeItemsRemoved ( const QList< DA::DAAbstractNodeGraphicsItem * > &  items)
signal

节点被移除

注解
如果一次性删除了
参见
DAAbstractNodeGraphicsItem
DAAbstractNodeLinkGraphicsItem、QGraphicsItem,那么信号的触发顺序是:
nodeItemsRemoved
nodeLinksRemoved
itemRemoved

◆ nodeItemsToNodes()

QList< DAAbstractNode::SharedPointer > DA::DANodeGraphicsScene::nodeItemsToNodes ( const QList< DAAbstractNodeGraphicsItem * > &  nodeItems)
staticprotected

所有节点item对应的node

参数
nodeItems
返回

◆ nodeLinksRemoved

void DA::DANodeGraphicsScene::nodeLinksRemoved ( const QList< DA::DAAbstractNodeLinkGraphicsItem * > &  items)
signal

连接线被移除

注解
如果一次性删除了
参见
DAAbstractNodeGraphicsItem
DAAbstractNodeLinkGraphicsItem、QGraphicsItem,那么信号的触发顺序是:
nodeItemsRemoved
nodeLinksRemoved
itemRemoved

◆ onNodeNameChanged

void DA::DANodeGraphicsScene::onNodeNameChanged ( DAAbstractNode::SharedPointer  node,
const QString &  oldName,
const QString &  newName 
)
protectedslot

节点名字改变触发的槽

参数
node
oldName
newName

◆ onSelectItemChanged

void DA::DANodeGraphicsScene::onSelectItemChanged ( DAGraphicsItem item)
protectedslot

item选择改变

注解
注意,多选只会传递最后选中的那个,避免批量选择时的卡顿

◆ removeSelectedItems_()

int DA::DANodeGraphicsScene::removeSelectedItems_ ( )

删除选中的item,此函数支持redo/undo

返回
返回删除的数量,如果没有删除,返回0
注解
此函数会把item对应的节点也删除
有些连带删除,例如选择了一个node,它有连线,删除节点会把连线也删除,这时候返回的删除结果会比较多

注意: 如果处于链接状态(isStartLink() == true)那么不能删除正在链接的那个元素的节点,否则会导致异常

◆ selectNodeItemChanged

void DA::DANodeGraphicsScene::selectNodeItemChanged ( DA::DAAbstractNodeGraphicsItem item)
signal

选中了某个节点的设置窗口

参数
w

◆ selectNodeLinkChanged

void DA::DANodeGraphicsScene::selectNodeLinkChanged ( DA::DAAbstractNodeLinkGraphicsItem link)
signal

选中了某个节点的设置窗口

参数
w

◆ setWorkFlow()

void DA::DANodeGraphicsScene::setWorkFlow ( DAWorkFlow wf)

设置工作流

参数
wf
注解
DANodeGraphicsScene不负责管理DAWorkFlow的所有权

该类的文档由以下文件生成: