跳到主要内容

制作一个简单的 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环境)
  • 参照 配置格式 打包插件包。

5. 下一步