CTK入门教程04.02:插件加载

系列索引:CTK框架入门教程索引

本文使用CTK框架实现插件加载,流程图为

flowchart LR

A(launcher) --> B[Plugin A]
A --> C[Plugin B]
B --> D[Plugin Activator]
C --> E[Plugin Activator]

插件库

创建工程

打开Qt Creator,新建一个空qmake/dll工程,命名为testPlugin

工程类型

设置pro配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
QT += core
QT -= gui

TARGET = testPlugin
TEMPLATE = lib
CONFIG += plugin

win32:{
INCLUDEPATH += \
D:\CTK-2023.07.13\Libs\Core \
D:\CTK-2023.07.13\Libs\PluginFramework \
D:\CTK-2023.07.13\build\CTK-build\Libs\PluginFramework \
D:\CTK-2023.07.13\build\CTK-build\Libs\Core
}

unix:{
INCLUDEPATH += \
/home/jackey/Downloads/CTK-2023.07.13/Libs/Core \
/home/jackey/Downloads/CTK-2023.07.13/Libs/PluginFramework \
/home/jackey/Downloads/CTK-2023.07.13/build/CTK-build/Libs/PluginFramework \
/home/jackey/Downloads/CTK-2023.07.13/build/CTK-build/Libs/Core
}

给工程添加一个类testPluginActivator

头文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef TESTPLUGINACTIVATOR_H
#define TESTPLUGINACTIVATOR_H

#include <QObject>

#include "ctkPluginActivator.h"
#include "ctkPluginContext.h"

class testPluginActivator : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "testPlugin")
Q_INTERFACES(ctkPluginActivator)
public:
explicit testPluginActivator();
void start(ctkPluginContext *context);
void stop(ctkPluginContext *context);

signals:

};

#endif // TESTPLUGINACTIVATOR_H

类实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "testpluginactivator.h"

#include <QDebug>

testPluginActivator::testPluginActivator()
{}

void testPluginActivator::start(ctkPluginContext *context)
{
qDebug() << "first plugin start: " << context;
}

void testPluginActivator::stop(ctkPluginContext *context)
{
qDebug() << "first plugin stop: " << context;
}

元数据

添加一个资源文件,命名为resource.qrc。给资源文件添加一个前缀/testPlugin/META-INF,其中testPlugin是工程的名字。再添加一个文本文件MANIFEST.MF,内容为

1
2
Plugin-SymbolicName:testPlugin
Plugin-Version:1.0.0

并把此文件添加到资源文件的前缀下

元数据

编译工程为动态库

插件动态库

元数据详细信息可以查看:CTK入门教程05.01:元数据

运行

启动器与插件配置使用,程序运行输出为

1
2
3
4
5
6
7
8
11:50:03: Starting D:\Projects\Qt\build-test-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\debug\test.exe...
Using database: "D:\\Projects\\Qt\\build-test-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\\debug\\configuration\\plugins.db"
Using database: "D:\\Projects\\Qt\\build-test-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\\debug\\configuration\\plugins.db"
Using database: "D:\\Projects\\Qt\\build-test-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\\debug\\configuration\\plugins.db"
CTK plugin framework start...
"Plugin[testPlugin_1.0.0] installed..."
first plugin start: 0x23d7bcca1a0
Plugin start...

说明

  • 子工程、启动器、插件工程将作为后续开发的工程模版

CTK入门教程04.02:插件加载
https://blog.jackeylea.com/ctk/how-to-load-ctk-plugin-library/
作者
JackeyLea
发布于
2024年1月7日
许可协议