/** * * @file FITKComponentInterface.h * @brief 组件接口抽象类声明 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 * */ #ifndef __FITKCOMPONENT_INTERFACE_H__ #define __FITKCOMPONENT_INTERFACE_H__ #include "FITKAppFrameworkAPI.h" #include #include #include #include #include //定义回调函数,参数为void*,返回值为int typedef std::function CallBackFuns; namespace Core { class FITKAbstractDataObject; } namespace AppFrame { /** * @brief 组件接口抽象类声明 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ class FITKAppFrameworkAPI FITKComponentInterface { public: /** * @brief Construct a new FITKComponentInterface object * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ explicit FITKComponentInterface() = default; /** * @brief Destroy the FITKComponentInterface object * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ virtual ~FITKComponentInterface() = 0; /** * @brief 初始化,创建完成之后自动化调用 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ virtual void init(); /** * @brief 获取组件中的界面 * @param[i] indexPort 抽象定义接口 * @return QWidget* * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ virtual QWidget* getWidget(const int indexPort); /** * @brief 获取部件名称,不能重复 * @return QString * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-04 */ virtual QString getComponentName() = 0; /** * @brief 执行组件 * @param[i] indexPort 抽象接口定义 * @return true * @return false * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-07 */ virtual bool exec(const int indexPort); /** * @brief 设置名称 * @param[i] name 名称 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-30 */ void setComponentObjName(const QString & name); /** * @brief 获取名称 * @return QString * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-30 */ QString getComponentObjName() const; /** * @brief 获取回调函数 * @param[i] key 键 * @return CallBackFuns * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-04-25 */ CallBackFuns getCallBackFuns(int key); /** * @brief 设置回调函数,键相同的会覆盖 * @param[i] k 键 * @param[i] f 回调函数 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-04-25 */ void setCallBackFuns(int k, CallBackFuns f); /** * @brief 移除回调函数 * @param[i] k 键 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-04-25 */ void removeCallBackFun(int k); /** * @brief 设置数据对象 * @param[i] name 数据对象标记 * @param[i] data 数据对象指针 * @author libaojun (libaojunqd@foxmail.com) * @date 2024-10-10 */ void setDataObject(const QString& name, Core::FITKAbstractDataObject* data); /** * @brief 获取数据对象 * @param[i] name 数据对象标记 * @return Core::FITKAbstractDataobject* * @author libaojun (libaojunqd@foxmail.com) * @date 2024-10-10 */ Core::FITKAbstractDataObject* getDataObject(const QString& name); template /** * @brief 获取数据对象并进行强制类型转换 * @param[i] name 名称 * @return T* * @author libaojun (libaojunqd@foxmail.com) * @date 2024-10-10 */ T* getDataObjectT(const QString& name) { return dynamic_cast(this->getDataObject(name)); } /** * @brief 重置全部数据对象 * @author libaojun (libaojunqd@foxmail.com) * @date 2024-10-10 */ void resetDataObjects(); protected: /** * @brief 名称 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-03-30 */ QString _compObjName{}; /** * @brief 回调函数 * @author LiBaojun (libaojunqd@foxmail.com) * @date 2024-04-25 */ QHash _callBackFuns{}; /** * @brief 数据对象hash * @author libaojun (libaojunqd@foxmail.com) * @date 2024-10-10 */ QHash _dataObjects{}; }; } #endif