QT插件系统

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

    #ifndef PLUGINONEINTERFACE_H
    #define PLUGINONEINTERFACE_H
    #include <QWidget>
    // 组织域名+产品名+版本号
    #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();

相关推荐
Summer_Uncle3 小时前
【QT学习】Qt界面布局的生命周期和加载时机
c++·qt
weixin_464307636 小时前
QT宏、属性系统
开发语言·qt
qq_283720057 小时前
VSCode 编译 Qt 5.12 QML 完整教程(Windows + MinGW)
windows·vscode·qt
肖恭伟8 小时前
Curso调试Qt:GDB + Qt 官方 qt5printers.py + .gdbinit
开发语言·qt
天天学IT8 小时前
第二章 Qt 模块
开发语言·qt·qt教程·qt6教程
仲舟8 小时前
【Qt游戏】骰子街Machi_Koro_AI
c++·人工智能·qt·游戏
火山上的企鹅9 小时前
QGC二次开发本地媒体浏览实战(二)FFmpeg最小系统实战
qt·ffmpeg·媒体·qgc
rookie软工9 小时前
Qt代理委托实现
开发语言·python·qt
feiyangqingyun9 小时前
Qt/C++源码/地图控件/实时动态轨迹/历史轨迹回放/无人机/飞行轨迹/性能强悍
qt·轨迹回放·实时轨迹