目录
1.MANIFEST.MF文件
下面列一下配置文件里面的内容:
名称 | 作用 |
---|---|
Plugin-SymbolicName | 插件的符号名,插件的唯一标识 |
Plugin-Copyright | 插件的版权信息 |
Plugin-Description | 插件的简要描述 |
Plugin-Name | 插件的名称,对插件起说明作用,不影响插件功能 |
Plugin-Vendor | 插件的供应商 |
Plugin-Localization | 标识插件的Qt .qm 文件的基本名称:如中文qt_zh.qm,此处写zh |
Require-Plugin | 插件所需的其他插件的符号名称 |
Plugin-Version | 插件的版本号 |
Plugin-ActivationPolicy | 插件的激活策略 |
Plugin-UpdateLocation | 在插件更新操作期间,获取新插件版本的位置 |
1)插件的激活策略由 Plugin-ActivationPolicy指定,默认值是 lazy
eager:插件使用 ctkPlugin::START_ACTIVATION_POLICY 选项启动,当框架启动时会立即激活。
lazy:插件使用 ctkPlugin::START_ACTIVATION_POLICY 选项启动,并在 ctkPlugin::STARTING 状态等待,直到插件的第一类实例化发生。插件将在实例返回给请求者之前被激活。
2)插件依赖的插件由Require-Plugin指定,
resolution用来标识Require-Plugin中的解析类型,默认值是mandatory。包括:
optional(可选的):表示所需的插件是可选的,并且即使所需的插件没有被解析,该插件也可以被解析。
mandatory(强制的):表示在解析插件时,所需的插件也必须被解析。如果所需的插件不能被解析,则模块解析失败。
如:
Plugin-SymbolicName:Plugin-xxx-1
Plugin-Version:1.0.0
Require-Plugin:Plugin-xxx-2; plugin-version="[1.0,2.0)"; resolution:="mandatory"
Plugin-xxx-2:为需要依赖的插件名【就是另一个插件在MANIFEST.MF里的Plugin-SymbolicName】;
[1.0,2.0):为Plugin-xxx-2的版本,这里是左闭右开区间,默认是1.0;
resolution:有两个选择,optional、mandatory。前者是弱依赖,就算依赖的插件没有,当前插件也能正常使用,后者是强依赖,如果没有依赖的插件,当前插件就不能被start;
这样就向框架申明了,该插件加载时需要先加载Plugin-xxx-2插件,所有用户插件都应该有这样一份申明。
2.获取MANIFEST.MF中的数据
//获取元数据
......
QHash<QString, QString> headers = plugin->getHeaders();
ctkVersion version = ctkVersion::parseVersion(headers.value(ctkPluginConstants::PLUGIN_VERSION));
QString name = headers.value(ctkPluginConstants::PLUGIN_SYMBOLICNAME);
QString number = headers.value("Plugin-Number");
qDebug()<<"version: "<<version;
qDebug()<<"name: "<<name;
qDebug()<<"number: "<<number;
MANIFEST.MF文件中有很多可填内容,在ctkPluginConstants.h中能找到相关宏定义