/** * @file WorkflowGraphicsView.h * @brief 工作流场景视口 * @date 2011-09-13 */ #ifndef PAI_FRAME_WORKFLOWWIDGET_WORKFLOWGRAPHICSVIEW_H #define PAI_FRAME_WORKFLOWWIDGET_WORKFLOWGRAPHICSVIEW_H #include 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