/** * @file PaiTreeItemDelegate.h * @brief PAI系统中常见的数据树节点ItemDelegate类 * @date 2011-09-29 */ #ifndef PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H #define PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H #include #include #include "Turtle.h" namespace pai { namespace gui { /** * @class PaiTreeItemDelegate * @brief 参数编辑面板所用的ItemDelegate */ class PAI_WIDGET_EXPORT PaiTreeItemDelegate:public QStyledItemDelegate { Q_OBJECT public: /** * @brief 构造函数 * @param[in] pParent 父类对象指针 */ PaiTreeItemDelegate(QObject * parent = 0); protected: /** * @brief 获取合适的节点宽高 * @param[in] option 绘制参数 * @param[in] index 树节点索引 * @return 返回合适的节点宽高 */ virtual QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const; /** * @brief 重新绘制树节点 * @param[in] pPainter 绘制设备上下文 * @param[in] option 绘制参数 * @param[in] index 树节点索引 */ virtual void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const; }; /** * @class PaiCagegoryTreeItemDelegate * @brief 模块管理树所用的ItemDelegate */ class PAI_WIDGET_EXPORT PaiCagegoryTreeItemDelegate : public QStyledItemDelegate { public: /** * @brief 构造函数 * @param[in] pParent 父类对象指针 */ PaiCagegoryTreeItemDelegate(QObject *pParent = NULL); /** * @brief 设置行高 * @param[in] height 行高值 */ void SetRowHeight(int height); protected: /** * @brief 重新绘制树节点 * @param[in] pPainter 绘制设备上下文 * @param[in] option 绘制参数 * @param[in] index 树节点索引 */ virtual void paint(QPainter *pPainter, const QStyleOptionViewItem & option, const QModelIndex & index) const; /** * @brief 获取合适的节点宽高 * @param[in] option 绘制参数 * @param[in] index 树节点索引 * @return 返回合适的节点宽高 */ virtual QSize sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index) const; private: int m_RowHeight; ///< 行高 }; /** * @class PaiNameLimitedTreeItemDelegate * @brief 限定重命名文本内容的TreeItemDelegate */ class PAI_WIDGET_EXPORT PaiNameLimitedTreeItemDelegate : public PaiTreeItemDelegate { Q_OBJECT public: /** * @brief 构造函数 * @param[in] pParent 父窗口句柄 */ PaiNameLimitedTreeItemDelegate(QWidget *pParent = NULL); /** * @brief 构造函数 * @param[in] regExp 对输入作限定的正则表达式 * @param[in] pParent 父窗口句柄 */ PaiNameLimitedTreeItemDelegate(const QRegExp & regExp, QWidget *pParent = NULL); /** * @brief 重写函数,返回带输入限定的LineEdit * @param[in] pParent 父窗口句柄 * @param[in] option 绘制参数 * @param[in] index 树节点索引 */ virtual QWidget *createEditor(QWidget *pParent, const QStyleOptionViewItem & option, const QModelIndex & index) const; /** * @brief 重写函数,设置输入组件的值 * @param[in] pEditor 编辑控件对象 * @param[in] index 树节点索引 */ virtual void setEditorData(QWidget *pEditor, const QModelIndex & index) const; /** * @brief 重写函数,将LineEdit数值更新到model,不合发则还原至原始值。 * @param[in] pEditor 编辑控件对象 * @param[in] pModel 项目模型 * @param[in] index 树节点索引 */ virtual void setModelData(QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex & index) const; /** * @brief 重写函数,更新LineEdit大小。 * @param[in] pEditor 编辑控件对象 * @param[in] option 绘制参数 * @param[in] index 树节点索引 */ virtual void updateEditorGeometry(QWidget *pEditor, const QStyleOptionViewItem & option, const QModelIndex & index) const; private: QRegExp m_RegExp; ///< 名称限定的正则表达式 signals: /** * @brief 当编辑新的名称写入model时,释放此信号 * @param[in] index 树节点索引 */ void ModelDataChanged(const QModelIndex & index) const; }; } } #endif ///< PAI_FRAME_WIDGET_PAITREEITEMDELEGATE_H