QT插件系统

  1. 创建接口头文件,Q_DECLARE_INTERFACE,定义接口

    #ifndef PLUGINONEINTERFACE_H
    #define PLUGINONEINTERFACE_H
    #include
    // 组织域名+产品名+版本号
    #define PluginOneInterfaceIID "baidu.com.PluginOneInterface/1.0"
    class PluginOneInterface
    {
    public:
    virtual ~PluginOneInterface() = default;
    virtual QWidget* getWidget() = 0;
    };
    Q_DECLARE_INTERFACE(PluginOneInterface,PluginOneInterfaceIID)
    #endif // PLUGINONEINTERFACE_H

  2. 编写插件类,继承接口类

    class PLUGINONE_EXPORT PluginOne:public QObject ,public PluginOneInterface
    {
    Q_OBJECT
    Q_PLUGIN_METADATA(IID PluginOneInterfaceIID FILE "PluginOne.json")
    Q_INTERFACES(PluginOneInterface)
    public:
    PluginOne();
    ~PluginOne();
    QWidget * getWidget() override;
    private:
    QWidget * mWidget{nullptr};
    };

  3. 主项目加载插件

  4. 获取插件中元数据Q_PLUGIN_METADATA的json数据

    QJsonObject meta = loader.metaData();
    QJsonObject metaData = meta.value("MetaData").toObject();
    QString version = metaData.value("version").toString();
    QString name = metaData.value("name").toString();

相关推荐
扶尔魔ocy30 分钟前
【QT OpenGL】知识点编目及传送门
qt·opengl·osg
qq_401700411 小时前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
GreenHandBruce2 小时前
基于Qt 6.12.0 + FFmpeg 9.0.2的4k视频播放器
qt·ffmpeg·音视频
誰能久伴不乏5 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
沫璃染墨19 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
小豆庄1 天前
视频脱敏引擎的追踪难题:转场误判定、ID撞号和淡入窗口
qt·算法·目标检测·音视频·视频·敏捷流程
小灰灰搞电子1 天前
Qt 中使用 QSettings 存储结构体数据详解
开发语言·qt
LaoWaiHang2 天前
关于Qt中鼠标左键事件被子控件截留的处理
qt
初阳7852 天前
【基于Qt5仿音乐播放器(一)】——项目准备
qt·1024程序员节
kaixin_learn_qt_ing2 天前
Qt开发工程师
qt