跳到主要内容

制作一个简单的 HMI 插件

本文演示在 Windows 上使用 Qt Creator 从零创建一个最简单的客户端插件。

须先完成 环境总览 中「客户端插件(Windows)」的准备。

目标​

插件名编译产物
MyPluginMyPlugin.dll

1. 新建工程​

1. 打开新建工程向导​

启动 Qt Creator,选择 文件 → New Project...。

打开新建工程

2. 选择模板​

在左侧选择 库,再选中 C++ Library,单击 选择... 进入下一步。

选择 C++ Library 模板

3. 设置工程位置​

名称 填写 MyPlugin。创建路径 请按实际需求选择,然后单击 下一步。

选择工程名称与路径

4. 选择构建系统​

Build system 选择 qmake,单击 下一步。

选择 qmake

5. 选择 Qt 模块​

将 Qt module 改为 Widgets,其余项保持默认,单击 下一步。

选择 Widgets 模块

6. 单击下一步​

单击下一步

7. 选择构建套件​

勾选本机已配置的 Desktop Qt 5.15.2 MSVC2019 64bit(或等价的 MSVC 64-bit 套件),并勾选 Debug 与 Release。单击 下一步。

选择构建套件

8. 单击完成​

单击完成

2. 修改工程文件​

向导生成的工程尚不能作为客户端插件编译。请按下列内容改写 .pro、头文件与源文件。

拷贝开发包之前,编辑器可能提示找不到 plugincommon.h,属正常现象,完成第 3 步并执行 qmake 后即可解析。

1. 修改 MyPlugin.pro​

打开 MyPlugin.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

修改工程文件

提示

示教器 Linux / ARM 环境请注释 Windows 链接行,启用 lib/aarch64 一行。

2. 修改 myplugin.h​

打开 myplugin.h,将内容替换为:

#ifndef MYPLUGIN_H
#define 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;
};
}

#endif // MYPLUGIN_H

修改头文件

3. 修改 myplugin.cpp​

打开 myplugin.cpp,将内容替换为:

#include "myplugin.h"
#include <QWidget>

XPLUGIN_REGISTER(PLUGIN_NAME, MyPlugin)

void xplugin::MyPlugin::init() {
auto *w = new QWidget;
CreateCenterWidget(PLUGIN_NAME, w);
}

修改源文件

要点:

  • XPLUGIN_REGISTER(PLUGIN_NAME, MyPlugin) 在 xplugin 命名空间中注册插件,因此 MyPlugin 类须定义在 xplugin 命名空间内。
  • PLUGIN_NAME 须与 .pro 中 DEFINES += PLUGIN_NAME=... 的取值一致。后续打包时,配置文件中的 name 及插件文件名亦须与此一致,见 插件包制作。

3. 拷贝开发包头文件与库​

从已获取的客户端插件开发包中,将 include 与 lib 两个目录拷贝到 MyPlugin.pro 所在目录(本文为 D:\MyPluginDemo\MyPlugin)。

开发包目录名随版本变化,下图以 xCorePlugin_v1.0.2.7 为例,请以实际获取的开发包为准。

开发包中的 include 与 lib

拷贝完成后,工程目录应同时包含源码与开发包目录:

拷贝到工程目录

4. 执行 qmake 并编译​

1. 执行 qmake​

选择 构建 → 执行 qmake。

执行 qmake

编译输出中出现 qmake / jom 成功信息后,即可继续构建。编辑器中的红色提示可能短暂残留,属正常现象。

qmake 完成

2. 构建项目​

选择 构建 → 构建项目 "MyPlugin"(或按 Ctrl+B)。

构建项目

若编译成功,可跳过本节第 3、4 步,直接查阅产物。

3. 调整构建目录(编译失败时)​

若「问题」面板出现类似下列信息,多为默认 Shadow build 目录的相对路径无法正确解析 Qt 头文件:

dependent '...\Qt\5.15.2\msvc2019_64\include\QtCore\QHash' does not exist

构建失败示例

请将 Debug 与 Release 的构建目录改为工程旁的短路径,例如 D:\MyPluginDemo\Debug 与 D:\MyPluginDemo\Release。

  1. 打开左侧 项目,进入当前套件的 构建设置。
  2. Active build configuration 选择 Debug,将 构建目录 改为 D:\MyPluginDemo\Debug。

打开构建设置

选择 Debug 构建目录

Debug 构建目录已更改

  1. 将 Active build configuration 切换为 Release,将 构建目录 改为 D:\MyPluginDemo\Release。

Release 默认构建目录

Release 构建目录已更改

4. 再次构建​

调整构建目录后,再次选择 构建 → 构建项目 "MyPlugin"。

再次构建

编译输出中出现 jom.exe finished successfully 即表示成功。

构建成功

5. 查找编译产物​

Windows 上产物为 MyPlugin.dll。按上文调整构建目录后,Release 产物位于:

D:\MyPluginDemo\Release\release\MyPlugin.dll

查找编译产物

若使用 Debug 配置,路径相应为 D:\MyPluginDemo\Debug\debug\。未改构建目录时,产物位于 Qt Creator 默认的 Shadow build 目录中。

示教器 Linux 端对应产物为共享库(.so)。

6. 打包与导入​

编译成功仅得到插件动态库,尚不能直接导入 HMI。请按下列文档完成后续步骤:

  1. 按 插件包制作 编写配置文件并打包。
  2. 按 安装与使用 导入并启用插件。