7AA7 / 开放文档
返回首页

插件接口

更新于 2026-10-12

插件类须继承 QObject 与 S7AA7::I7AA7Plugin,并实现四个核心方法。

一、四个核心接口

方法调用时机职责
getPluginMetaInfo()加载成功后立即返回插件元信息;必须轻量、可重入、无副作用
pluginInit(hostApi)版本校验通过且启用初始化;保存 I7AA7HostApi*;返回失败即视为损坏
getPluginWidget(parent)用户点击二级菜单返回嵌入内容区的 QWidget
pluginUninstall()禁用 / 卸载 / 关闭释放定时器、线程、句柄、缓存

二、可选接口(末尾追加,默认空实现)

方法说明
pluginSignature()返回 DLL 字节的 RSA 签名;第三方无需实现(由服务端签名)
callService(serviceId, args)开放插件间服务,供 callPluginService 路由调用
onRefreshRequested()用户手动「刷新检索」后触发,可重新扫描自己的数据

三、元信息结构 PluginMetaInfo

字段类型说明
pluginIdQString插件唯一 ID(反向域名,全插件不重复)
pluginNameQString显示名称
pluginAuthorQString作者 / 组织
pluginVersionQString语义化版本,如 1.0.3
hostMinimumVersionQString要求的最低主程序版本
shortDescriptionQString一行简介(列表展示)
longDescriptionQString详细说明(可含换行)
iconKeyQString可选图标键
categoryQString可选分类(预留)
extraQVariantMap可扩展字段,增删不破坏 ABI

extra 约定键:homepage、license、tags、signature、network_access、network_domains。

四、加载错误码

枚举含义
Ok加载成功
NotAQtPlugin非 Qt 插件(缺 Q_PLUGIN_METADATA)
WrongInterface未实现 I7AA7Plugin(IID 不匹配)
MetaInfoInvalid插件名或 id 为空
VersionTooHigh要求的最低版本高于当前主程序
DisabledByConfig被本地配置禁用(非错误)
FileCorruptedDLL 损坏或不可读
PlatformMismatchDebug / 32 位 / 编译器不匹配
InstanceCreationFailedIID 匹配但 instance() 返回空
InitRaisedExceptionpluginInit() 抛异常或返回失败
SignatureInvalid数字签名校验失败

五、类骨架

cpp
#include <QObject>
#include "../include/I7AA7Plugin.h"
#include "../include/7AA7PluginMacros.h"

class MyPlugin : public QObject, public S7AA7::I7AA7Plugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID I7AA7PLUGIN_IID FILE "MyPlugin.json")
    Q_INTERFACES(S7AA7::I7AA7Plugin)
public:
    S7AA7::PluginMetaInfo getPluginMetaInfo() const override
    {
        S7AA7::PluginMetaInfo m;
        m.pluginId           = "com.company.myplugin";
        m.pluginName         = "";
        m.pluginVersion      = "1.0.0";
        m.hostMinimumVersion = "2.1.0";
        m.shortDescription   = "";
        return m;
    }
    bool pluginInit(S7AA7::I7AA7HostApi* hostApi) override
    { m_hostApi = hostApi; return true; }
    QWidget* getPluginWidget(QWidget* parent) override
    { auto* w = new QWidget(parent); /* 构建你的界面 */ return w; }
    void pluginUninstall() override { m_hostApi = nullptr; }
private:
    S7AA7::I7AA7HostApi* m_hostApi = nullptr;
};