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

这是带着undostack的GraphicsScene 此QGraphicsScene支持: 更多...

#include <DAGraphicsScene.h>

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

class  PrivateData
 

Public 类型

enum  LinkMode { LinkModeAutoStartEndFollowMouseClick }
 链接模式 更多...
 

Public 槽

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 ()
 清除场景动作
 

信号

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 成员函数

 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 cancelLink ()
 取消链接模式
 
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是否可以移动
 

静态 Public 成员函数

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逻辑一致
 

Protected 成员函数

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
 

友元

class DAGraphicsResizeableItem
 

详细描述

这是带着undostack的GraphicsScene 此QGraphicsScene支持:

  • item移动的undo/redo
  • item缩放的undo/redo item需要继承
    参见
    DAGraphicsResizeableItem
  • item添加删除的undo/redo
注解
能支持redo/undo操作的函数后面以“_”结尾

成员枚举类型说明

◆ LinkMode

链接模式

枚举值
LinkModeAutoStartEndFollowMouseClick 

The beginning is the current mouse position, the end follows the mouse movement, and the connection ends when the next left mouse button is clicked 开端为当前鼠标位置,末端跟随鼠标移动,在下个鼠标左键点击时结束连线

成员函数说明

◆ addItem_()

QUndoCommand * DA::DAGraphicsScene::addItem_ ( QGraphicsItem *  item)

等同additem,但使用redo/undo来添加,可以进行redo/undo操作

参数
item
返回
返回执行的命令

◆ addItems_()

QUndoCommand * DA::DAGraphicsScene::addItems_ ( const QList< QGraphicsItem * > &  its)

等同多次additem,但使用redo/undo来添加,可以进行redo/undo操作

参数
item
返回
返回执行的命令

◆ addItemToGroup()

void DA::DAGraphicsScene::addItemToGroup ( QGraphicsItemGroup *  group,
const QList< QGraphicsItem * > &  willGroupItems 
)
static

通用的item分组,此操作和QGraphicsScene::createItemGroup逻辑一致

参数
group
willGroupItems

◆ addItemWithSignal()

void DA::DAGraphicsScene::addItemWithSignal ( QGraphicsItem *  item)
protected

带信号的addItm

参数
item

◆ beginLink()

void DA::DAGraphicsScene::beginLink ( DAGraphicsLinkItem linkItem,
LinkMode  lm = LinkModeAutoStartEndFollowMouseClick 
)

开始链接模式

再开始链接模式,鼠标移动事件会改变当前链接线的末端位置,直到点击鼠标左键进行确认(endLink), 或者点击鼠标右键取消链接(cancelLink)

参数
linkItem连接线图元

◆ cancelLink()

void DA::DAGraphicsScene::cancelLink ( )
virtual

取消链接模式

DA::DANodeGraphicsScene 重载.

◆ clearSceneAction

void DA::DAGraphicsScene::clearSceneAction ( )
slot

清除场景动作

注解
此函数会把scene维护的场景动作指针销毁,销毁前会发射sceneActionDeactived信号

◆ commandsFactory()

DAGraphicsCommandsFactory * DA::DAGraphicsScene::commandsFactory ( )

命令工厂

返回

◆ createRect_()

DAGraphicsRectItem * DA::DAGraphicsScene::createRect_ ( const QPointF &  p = QPointF())

在画布中创建一个矩形

参数
p矩形的位置
返回

◆ createText_()

DAGraphicsTextItem * DA::DAGraphicsScene::createText_ ( const QString &  str = QString())

创建并加入一个文本框

参数
pos
返回
参见
getTextGraphicsItems

◆ dpiToPx()

int DA::DAGraphicsScene::dpiToPx ( int  dpi,
int  r 
)
static

dpi转为像素

参数
dpi
r
返回

◆ emitItemBodySizeChanged()

void DA::DAGraphicsScene::emitItemBodySizeChanged ( DAGraphicsResizeableItem item,
const QSizeF &  oldSize,
const QSizeF &  newSize 
)
protected

调用此函数 主动触发itemBodySizeChanged信号

参数
item
oldSize
newSize

◆ emitItemRotationChanged()

void DA::DAGraphicsScene::emitItemRotationChanged ( DAGraphicsResizeableItem item,
const qreal &  rotation 
)
protected

调用此函数 主动触发itemRotationed信号

参数
item
rotation

◆ emitItemsPositionChanged()

void DA::DAGraphicsScene::emitItemsPositionChanged ( const QList< QGraphicsItem * > &  items,
const QList< QPointF > &  oldPos,
const QList< QPointF > &  newPos 
)
protected

调用此函数 主动触发itemsPositionChanged信号,这个函数用于 继承此类例如实现了键盘移动item,主动触发此信号

参数
items
oldPos
newPos

◆ endLink()

void DA::DAGraphicsScene::endLink ( )

结束链接模式

结束链接模式会正常记录当前的连线

如果是要取消当前的连接线,使用

参见
cancelLink

此函数结束时会发出

参见
linkCompleted 信号
注解
这里有个问题,endLink如果带有redo/undo动作的,但有些情况下,需要处理链接撤销前和后的动作,例如工作流, 链接和不链接的逻辑是不一样的,因此,redo/undo的动作并不提供,而是由用户自己处理

◆ findItemByID() [1/2]

QGraphicsItem * DA::DAGraphicsScene::findItemByID ( const QList< QGraphicsItem * > &  its,
uint64_t  id,
bool  recursion = false 
)
static

查找id对应的GraphicsItem*

目前有

参见
DAGraphicsItem,
DAGraphicsItemGroup,
DAGraphicsStandardTextItem 存在id
参数
its
id
recursion
返回

◆ findItemByID() [2/2]

QGraphicsItem * DA::DAGraphicsScene::findItemByID ( uint64_t  id,
bool  recursion = false 
) const

通过id查找item,此函数性能为O(n)

参数
id
recursion递归查找
返回

◆ getCurrentLinkItem()

DAGraphicsLinkItem * DA::DAGraphicsScene::getCurrentLinkItem ( ) const

获取当前正在进行连线的连接线item

注解
注意,此函数在
参见
beginLink 调用之后才会有指针返回,在调用
endLink
cancelLink 后都返回nullptr
返回
返回beginLink设置的指针

◆ getCurrentMouseScenePos()

QPointF DA::DAGraphicsScene::getCurrentMouseScenePos ( ) const

获取当前鼠标在scene的位置

返回

◆ getDefaultDPI()

int DA::DAGraphicsScene::getDefaultDPI ( )
static

获取默认的dpi

返回

◆ getGridLinePen()

QPen DA::DAGraphicsScene::getGridLinePen ( ) const

获取网格画笔

返回

◆ getGridSize()

QSize DA::DAGraphicsScene::getGridSize ( ) const

网格尺寸

返回

◆ getLastMousePressScenePos()

QPointF DA::DAGraphicsScene::getLastMousePressScenePos ( ) const

获取最后鼠标在scene点击的位置

注解
如果子类重载了mousePressEvent,必须调用DAGraphicsSceneWithUndoStack::mousePressEvent(mouseEvent);此函数才会生效
返回

◆ getLayouts()

QList< DAGraphicsLayout * > DA::DAGraphicsScene::getLayouts ( ) const

获取所有图层

返回

◆ getSelectedMovableItems()

QList< QGraphicsItem * > DA::DAGraphicsScene::getSelectedMovableItems ( )

获取选中且能移动的item

返回

◆ getUndoStack()

QUndoStack * DA::DAGraphicsScene::getUndoStack ( ) const

获取undostack指针

返回

◆ isEnableSnapToGrid()

bool DA::DAGraphicsScene::isEnableSnapToGrid ( ) const

是否允许对齐网格

返回

◆ isHaveSceneAction()

bool DA::DAGraphicsScene::isHaveSceneAction ( ) const

判断当前是否存在场景动作

返回

◆ isIgnoreLinkEvent()

bool DA::DAGraphicsScene::isIgnoreLinkEvent ( ) const

判断当前是否忽略链接事件

返回

◆ isItemCanMove()

bool DA::DAGraphicsScene::isItemCanMove ( QGraphicsItem *  positem,
const QPointF &  scenePos 
)
virtual

判断点击的item是否可以移动

对于一些特殊的item,可以通过继承此函数来否决掉DAGraphicsSceneWithUndoStack对item移动的判断,否则会对item进行移动 最简单的实现如下:

bool DAGraphicsSceneWithUndoStack::isItemCanMove(const QGraphicsItem* positem, const QPointF& scenePos)
{
//没选中
if (positem == nullptr) {
return false;
}
//选中了但不可移动,也不行
if (!positem->flags().testFlag(QGraphicsItem::ItemIsMovable)) {
return false;
}
return true;
}
参数
selitems
返回

◆ isPaintBackgroundInCache()

bool DA::DAGraphicsScene::isPaintBackgroundInCache ( ) const

是否绘制背景使用缓冲

返回

◆ isReady()

bool DA::DAGraphicsScene::isReady ( ) const

场景是否就绪

返回
如果场景还没加载完成,ready为false,一般这个函数在工程加载的时候应用

◆ isShowGridLine()

bool DA::DAGraphicsScene::isShowGridLine ( )

是否显示网格线

返回

◆ isStartLink()

bool DA::DAGraphicsScene::isStartLink ( ) const

判断当前是否是链接模式

返回

◆ itemBodySizeChanged

void DA::DAGraphicsScene::itemBodySizeChanged ( DAGraphicsResizeableItem item,
const QSizeF &  oldSize,
const QSizeF &  newSize 
)
signal

条目bodysize改变触发的信号

参数
item
rotation

◆ itemRotationChanged

void DA::DAGraphicsScene::itemRotationChanged ( DAGraphicsResizeableItem item,
const qreal &  rotation 
)
signal

item旋转发出的信号

参数
item
rotation

◆ itemsAdded

void DA::DAGraphicsScene::itemsAdded ( const QList< QGraphicsItem * > &  its)
signal

item添加的信号

注解
此信号是通过DAGraphicsScene::addItem_ 或是DAGraphicsScene::addItems_ 函数才会触发, 直接调用QGraphicsScene::addItem 函数不会触发此函数
参数
item

◆ itemsPositionChanged

void DA::DAGraphicsScene::itemsPositionChanged ( const QList< QGraphicsItem * > &  items,
const QList< QPointF > &  oldPos,
const QList< QPointF > &  newPos 
)
signal

item移动发射的信号

此信号只针对鼠标移动导致的item位置改变

注解
这个信号相比objectitem的信号发送频率低很多,只有在鼠标释放的时候会发出
参数
item
oldPos
newPos

◆ itemsRemoved

void DA::DAGraphicsScene::itemsRemoved ( const QList< QGraphicsItem * > &  its)
signal

item移除的信号

注解
此信号是通过DAGraphicsScene::removeItem_ 或是DAGraphicsScene::removeItems_ 函数才会触发, 直接调用QGraphicsScene::removeItem 函数不会触发此函数
参数
item

◆ linkCompleted

void DA::DAGraphicsScene::linkCompleted ( DAGraphicsLinkItem linkItem)
signal

完成了一次链接

这个是最后连接完成的信号,会在endLink回调之后发出

参数
linkItem通过此指针可以获取两个连接点

◆ mousePressEvent()

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

处理链接事件

处理有移动事件

1.记录选中的所有图元,如果点击的是改变尺寸的点,这个就不执行记录

◆ push()

void DA::DAGraphicsScene::push ( QUndoCommand *  cmd)

等同s->undoStack().push(cmd);

参数
cmd

◆ registCommandsFactory()

void DA::DAGraphicsScene::registCommandsFactory ( DAGraphicsCommandsFactory fac)

注册命令工厂

命令工厂可以生成自己需要的命令,以便对redo/undo定制化

参数
fac
注解
命令工厂的内存由DAGraphicsScene管理,用户无需进行delete

◆ removeItem_()

QUndoCommand * DA::DAGraphicsScene::removeItem_ ( QGraphicsItem *  item)

等同removeItem,但使用redo/undo来添加,可以进行redo/undo操作

参数
item
autopush自动推入redo/undo栈,对于无需操作返回的cmd,此值需要设置为true,否则需要手动调用push函数,把返回的cmd推入
返回

◆ sceneActionActived

void DA::DAGraphicsScene::sceneActionActived ( DA::DAAbstractGraphicsSceneAction act)
signal

一个场景动作被激活的信号

参数
act

◆ sceneActionDeactived

void DA::DAGraphicsScene::sceneActionDeactived ( DA::DAAbstractGraphicsSceneAction act)
signal

一个场景动作已经解除激活的信号

参数
act

◆ selectAll

int DA::DAGraphicsScene::selectAll ( )
slot

选中所有item

注解
此函数会发射一次selectionChanged信号
返回
返回选中的条目

◆ selectedDAItems()

QList< DAGraphicsItem * > DA::DAGraphicsScene::selectedDAItems ( ) const

获取选中的da item

返回

◆ selectItemChanged

void DA::DAGraphicsScene::selectItemChanged ( DAGraphicsItem item)
signal

选中的item发生了变化,注意,选中的如果是分组,会检查分组内部的item的点击,最终也是发送被点击的item

参数
item

◆ selectLinkChanged

void DA::DAGraphicsScene::selectLinkChanged ( DAGraphicsLinkItem item)
signal

选中的链接线发生了改变

参数
item

◆ setEnableSnapToGrid

void DA::DAGraphicsScene::setEnableSnapToGrid ( bool  on = true)
slot

是否允许对齐网格

参数
on
注解
此操作对未对齐的item是不会起作用

◆ setGridLinePen()

void DA::DAGraphicsScene::setGridLinePen ( const QPen &  p)

设置网格画笔

参数
p

◆ setGridSize()

void DA::DAGraphicsScene::setGridSize ( const QSize &  gs)

设置网格尺寸

参数
gs

◆ setIgnoreLinkEvent()

void DA::DAGraphicsScene::setIgnoreLinkEvent ( bool  on)

设置忽略链接事件的处理,主要忽略mousePressEvent,mouseMoveEvent的链接事件

这个函数一般是在子类中的重载函数中调用,用于进行一些特殊处理需要暂时屏蔽掉链接事件

参数
on

◆ setPaintBackgroundInCache()

void DA::DAGraphicsScene::setPaintBackgroundInCache ( bool  on)

设置绘制背景使用缓冲

参数
on

◆ setReadOnly

void DA::DAGraphicsScene::setReadOnly ( bool  on)
slot

设定为只读模式

锁定后,无法移动,无法编辑,进入只读模式

◆ setReady()

void DA::DAGraphicsScene::setReady ( bool  on)

设置场景就绪

如果场景还没加载完成,ready为false,一般这个函数在工程加载的时候应用

参数
on

◆ setSelectionState

int DA::DAGraphicsScene::setSelectionState ( const QList< QGraphicsItem * > &  its,
bool  isSelect 
)
slot

设置item的选中状态

参数
its
isSelect

◆ setupSceneAction

void DA::DAGraphicsScene::setupSceneAction ( DA::DAAbstractGraphicsSceneAction act)
slot

激活场景动作

注解
DAAbstractGraphicsSceneAction的内存归scene管理
参数
act
参见
DAAbstractGraphicsSceneAction
注解
此函数发射sceneActionActived 信号

◆ showGridLine

void DA::DAGraphicsScene::showGridLine ( bool  on)
slot

显示网格线

参数
on

◆ toImage()

QImage DA::DAGraphicsScene::toImage ( int  dpi = 0)

转换为设备相关的图片

参数
dpi
返回

◆ toPixamp()

QPixmap DA::DAGraphicsScene::toPixamp ( int  dpi = 0)

导出为pixmap

返回

◆ undoStack()

QUndoStack & DA::DAGraphicsScene::undoStack ( )

获取DANodeGraphicsScene内部维护的undoStack

返回

◆ unselectAll

int DA::DAGraphicsScene::unselectAll ( )
slot

取消选择,把所有item设置为非选中状态

注解
此函数会发射一次selectionChanged信号
返回
返回取消选中的条目

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