logplus/Workflow/WFEngine/Component/WorkflowWidget/include/WorkflowGraphicsView.h
2026-01-16 17:18:41 +08:00

133 lines
3.3 KiB
C++

/**
* @file WorkflowGraphicsView.h
* @brief 工作流场景视口
* @date 2011-09-13
*/
#ifndef PAI_FRAME_WORKFLOWWIDGET_WORKFLOWGRAPHICSVIEW_H
#define PAI_FRAME_WORKFLOWWIDGET_WORKFLOWGRAPHICSVIEW_H
#include <QGraphicsView>
class QGraphicsItem;
namespace pai
{
namespace graphics2d
{
/**
* @class WorkflowGraphicsView
* @brief 工作流编辑的视图区
*/
class WorkflowGraphicsView : public QGraphicsView
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param[in] pScene 场景
* @param[in] pParent 父亲
*/
WorkflowGraphicsView(QGraphicsScene *pScene, QWidget *pParent = NULL);
/**
* @brief 析构函数
*/
virtual ~WorkflowGraphicsView();
/**
* @brief 设置场景是否处于只读状态
* @param[in] readonly 只读标志
*/
void SetScenceReadOnly(bool readonly);
protected:
/**
* @brief 重载菜单相关事件,只读情况下忽略该事件。
* @param[in] pEvent 菜单事件
*/
virtual void contextMenuEvent(QContextMenuEvent *pEvent);
/**
* @brief 重载拖放相关事件,只读情况下忽略该事件。
* @param[in] pEvent 放下事件
*/
void dropEvent(QDropEvent *pEvent);
/**
* @brief 重载拖放相关事件,只读情况下忽略该事件。
* @param[in] pEvent 拖拽进入事件
*/
void dragEnterEvent(QDragEnterEvent *pEvent);
/**
* @brief 重载拖放相关事件,只读情况下忽略该事件。
* @param[in] pEvent 拖拽离开事件
*/
void dragLeaveEvent(QDragLeaveEvent *pEvent);
/**
* @brief 重载拖放相关事件,只读情况下忽略该事件。
* @param[in] pEvent 拖拽移动事件
*/
void dragMoveEvent(QDragMoveEvent *pEvent);
/**
* @brief 重载按键相关事件,只读情况下忽略该事件。
* @param[in] pEvent 键盘按压事件
*/
void keyPressEvent(QKeyEvent *pEvent);
/**
* @brief 重载按键相关事件,只读情况下忽略该事件。
* @param[in] pEvent 键盘释放事件
*/
void keyReleaseEvent(QKeyEvent *pEvent);
/**
* @brief 重载按键相关事件,只读情况下忽略该事件。
* @param[in] pEvent 鼠标按压事件
*/
void mousePressEvent(QMouseEvent *pEvent);
/**
* @brief 重载按键相关事件,只读情况下忽略该事件。
* @param[in] pEvent 鼠标释放事件
*/
void mouseReleaseEvent(QMouseEvent *pEvent);
/**
* @brief 重载按键相关事件,只读情况下忽略该事件。
* @param[in] pEvent 键盘移动事件
*/
void mouseMoveEvent(QMouseEvent *pEvent);
/**
* @brief 焦点移入相关事件。
* @param[in] pEvent 焦点进入事件
*/
void focusInEvent(QFocusEvent *pEvent);
private:
/**
* @brief 计算自适应的场景布大小
* @return 合适的大小
*/
QRectF CalculateAdaptiveSceneRect();
private slots:
/**
* @brief 使得Item居中显示
* @param[in] pItem 居中的item
*/
void slotItemNeedCenterOn(QGraphicsItem *pItem);
private:
bool m_SceneReadOnly; ///< 配置场景是否只读
QGraphicsItem *m_pEnsureVisibleItem; ///< 暂存确保可见的item
};
}
}
#endif ///< PAI_FRAME_WORKFLOWWIDGET_WORKFLOWGRAPHICSVIEW_H