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

命令工厂 更多...

#include <DAGraphicsCommandsFactory.h>

class  PrivateData
 

Public 成员函数

virtual DACommandsForGraphicsItemAddcreateItemAdd (QGraphicsItem *item)
 
virtual DACommandsForGraphicsItemsAddcreateItemsAdd (const QList< QGraphicsItem * > its)
 
virtual DACommandsForGraphicsItemRemovecreateItemRemove (QGraphicsItem *item, QUndoCommand *parent=nullptr)
 
virtual DACommandsForGraphicsItemsRemovecreateItemsRemove (const QList< QGraphicsItem * > its)
 
virtual DACommandsForGraphicsItemMovedcreateItemMoved (QGraphicsItem *item, const QPointF &start, const QPointF &end, bool skipfirst)
 
virtual DACommandsForGraphicsItemsMovedcreateItemsMoved (const QList< QGraphicsItem * > &items, const QList< QPointF > &starts, const QList< QPointF > &ends, bool skipfirst)
 
virtual DACommandsForGraphicsItemsMovedcreateItemsMoved ()
 针对鼠标移动的移动命令
 
virtual DACommandsForGraphicsItemResizedcreateItemResized (DAGraphicsResizeableItem *item, const QPointF &oldpos, const QSizeF &oldSize, const QPointF &newpos, const QSizeF &newSize, bool skipfirst=true)
 
virtual DACommandsForGraphicsItemResizedcreateItemResized (DAGraphicsResizeableItem *item, const QSizeF &oldSize, const QSizeF &newSize)
 
virtual DACommandsForGraphicsItemResizeWidthcreateItemResizeWidth (DAGraphicsResizeableItem *item, const qreal &oldWidth, const qreal &newWidth)
 
virtual DACommandsForGraphicsItemResizeHeightcreateItemResizeHeight (DAGraphicsResizeableItem *item, const qreal &oldHeight, const qreal &newHeight)
 
virtual DACommandsForGraphicsItemRotationcreateItemRotation (DAGraphicsResizeableItem *item, const qreal &oldRotation, const qreal &newRotation)
 
virtual DACommandsForGraphicsItemGroupingcreateItemGrouping (const QList< QGraphicsItem * > &groupingitems)
 
virtual DACommandsForGraphicsItemUngroupingcreateItemUngrouping (QGraphicsItemGroup *group)
 
DAGraphicsScenescene () const
 

Protected 成员函数

virtual void sceneMousePressEvent (QGraphicsSceneMouseEvent *mouseEvent)
 
virtual void sceneMouseMoveEvent (QGraphicsSceneMouseEvent *mouseEvent)
 
virtual void sceneMouseReleaseEvent (QGraphicsSceneMouseEvent *mouseEvent)
 
QPointF sceneMousePressPos () const
 记录场景鼠标左键按下的位置
 
const QList< std::pair< QGraphicsItem *, QPointF > > & movingItemsStartPos () const
 这是记录scene移动鼠标时记录的移动的item
 
const QList< std::pair< QGraphicsItem *, QPointF > > & movingItemsEndPos () const
 这是记录scene移动item时鼠标释放时记录的item信息
 
bool isMouseMovementCycleComplete () const
 标记是否完成了一个完整的鼠标移动元件周期,所谓完整的鼠标移动元件周期,是指鼠标按下并选择了元件,同时鼠标拖动让元件形成位移,最后再松开鼠标
 
bool isBeginMovingItems () const
 这个函数用来判断是否开始进入移动状态
 
void resetMouseMovementCycleState ()
 重置鼠标移动的循环状态,这个函数是重写sceneMouseReleaseEvent等函数时要重置状态用
 
void setScene (DAGraphicsScene *s)
 

友元

class DAGraphicsScene
 

详细描述

命令工厂

命令工厂有两个作用

  • 第一,可以根据字符串查找生成命令(这个暂时不实现)
  • 第二,可以用户自定义命令,例如移动命令,用户实现的移动命令需要记录其它的特殊功能,需要继承原来的移动命令则用户可以定义一个自己的命令工厂,针对移动命令生成一个用户自己的移动命令

成员函数说明

◆ createItemsMoved()

DACommandsForGraphicsItemsMoved * DA::DAGraphicsCommandsFactory::createItemsMoved ( )
virtual

针对鼠标移动的移动命令

参数
mouseReleaseEEvent
返回
注解
注意,此函数会返回nullptr,代表没有需要推入的命令

◆ isBeginMovingItems()

bool DA::DAGraphicsCommandsFactory::isBeginMovingItems ( ) const
protected

这个函数用来判断是否开始进入移动状态

返回

◆ isMouseMovementCycleComplete()

bool DA::DAGraphicsCommandsFactory::isMouseMovementCycleComplete ( ) const
protected

标记是否完成了一个完整的鼠标移动元件周期,所谓完整的鼠标移动元件周期,是指鼠标按下并选择了元件,同时鼠标拖动让元件形成位移,最后再松开鼠标

只有完整的鼠标移动元件周期,才应该产生元件移动命令

返回

◆ movingItemsEndPos()

const QList< std::pair< QGraphicsItem *, QPointF > > & DA::DAGraphicsCommandsFactory::movingItemsEndPos ( ) const
protected

这是记录scene移动item时鼠标释放时记录的item信息

返回

◆ movingItemsStartPos()

const QList< std::pair< QGraphicsItem *, QPointF > > & DA::DAGraphicsCommandsFactory::movingItemsStartPos ( ) const
protected

这是记录scene移动鼠标时记录的移动的item

这个函数仅仅在DACommandsForGraphicsItemsMoved* createItemsMoved(QGraphicsSceneMouseEvent* mouseReleaseEEvent)使用

用来对鼠标移动的item进行回退

返回

◆ sceneMousePressEvent()

void DA::DAGraphicsCommandsFactory::sceneMousePressEvent ( QGraphicsSceneMouseEvent *  mouseEvent)
protectedvirtual

工厂为何会存在如下函数: 原因是createItemMoved命令是针对鼠标移动元件产生的, DAGraphicsScene 场景在按下鼠标时记录元件的初始位置,场景释放鼠标时记录元件的最终位置,在场景的mouseReleaseEvent中, 生成DACommandsForGraphicsItemMoved命令,记录了这两个位置,形成命令,这样回退的时候,能回退到鼠标按下的位置。 但有些插件,需要记录除了这两个位置以外的信息,例如有个插件是作3d管道设计的,场景里除了元件的位置信息,还要记录元件的真实具体3d位置, 这样回退时,除了还原能还原出原来元件所在场景的位置,还要把真实具体3d位置的数据信息还原。 这时候,在mousePressEvent时就要介入,记录下具体元件的其它信息,原来这些操作是在scene的mousePressEvent实现的,用户也可以重写mousePressEvent, 但mousePressEvent除了处理回退命令,还要处理很多其它的操作,如果让用户为了这个命令的记录重写mousePressEvent,会多出很多没有用的工作, 因此把scene的mousePressEvent针对移动命令的操作移动到命令工厂中实现,如果用户需要针对这个命令进行特殊处理,可以重写sceneMousePressEvent和sceneMouseReleaseEvent即可

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

◆ sceneMousePressPos()

QPointF DA::DAGraphicsCommandsFactory::sceneMousePressPos ( ) const
protected

记录场景鼠标左键按下的位置

返回

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