制作一个简单的 HMI 插件
以下以 Windows + Qt Creator 为例;Linux 步骤相同,链接 xplugin.so。
1. 获取开发包
- 从Rokae官网获取 ROKAE+ 开发包。
2. 工程配置(.pro)
- 使用QtCreator新建一个工程。
- 将Rokae+开发包内的 include和lib文件夹拷贝到工程的pro文件的同级目录。
QT += widgets
CONFIG += c++11 plugin no_plugin_name_prefix
TEMPLATE = lib
DEFINES += PLUGIN_NAME=\\\"MyPlugin\\\"
#开启日志模块
DEFINES += LOG_MIN_FILE_LEVEL=XPLUGIN_LOG_LEVEL_DEBUG
INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib/windows -lxplugin
#arm下使用此配置
#LIBS += -L$$PWD/lib/aarch64 -l:xplugin.so
HEADERS += myplugin.h
SOURCES += myplugin.cpp
3. 插件类与注册
// myplugin.h
#include "plugincommon.h"
#include "interface/interfacemanager.h"
namespace xplugin {
class MyPlugin : public PluginBase {
Q_OBJECT
public:
explicit MyPlugin(QObject *parent = nullptr) : PluginBase(parent) {
setPluginLabel(tr("My Plugin"));
}
void init() override;
void detach() override;
};
}
// myplugin.cpp
#include "myplugin.h"
#include "event/xplugineventsystem.h"
XPLUGIN_REGISTER(PLUGIN_NAME, MyPlugin)
void xplugin::MyPlugin::init() {
xPluginInterface().initEventSystem();
auto *w = new QWidget;
CreateCenterWidget(PLUGIN_NAME, w);
}
void xplugin::MyPlugin::detach() {
xPluginEvent().unsubscribeByPlugin(PLUGIN_NAME);
}
要点:
- XPLUGIN_REGISTER(PLUGIN_NAME, MyPlugin) 宏定义中调用xplugin命名空间,因此MyPlugn类需要在xplugin命名空间下定义。
- PLUGIN_NAME 即pro文件中的插件名标识。
4. 编译与部署
- 编译得到 MyPlugin.dll 或者 MyPlugin.so(arm环境)。
- 参照 配置格式 打包插件包。