3. Qt开发环境搭建

工业组态与HMI项目往往需要同时面向桌面调试和嵌入式目标机运行,因此Qt开发环境并不是“装一个IDE”这么简单,而是由Qt Creator、Qt库、编译器、调试器、Kit、交叉编译工具链、版本控制共同组成的一套可复现工程体系。环境搭建的目标是:同一份源码,在PC上能快速仿真验证,在目标HMI屏上能一键交叉编译并部署。

一、核心原理:Kit是Qt环境的“装配清单”

Qt Creator本身只是壳,真正决定“用什么编译、编译给谁、如何调试”的是Kit(构建套件)。一个Kit至少绑定四类对象:Qt版本(qmake或CMake使用的Qt库)、编译器(GCC/MinGW/MSVC/交叉g++)、调试器(gdb/lldb)、设备(Desktop或远程Linux设备)。当Kit中任意一项与目标平台不匹配,就会出现“能编译不能运行”“链接报错找不到libQt5Core.so”等典型问题。

工业现场常见两类Kit:Desktop Kit用于PC端UI逻辑验证,Cross Kit用于ARM工控板/HMI。两者共享同一套工程文件,但构建目录、Qt库路径、sysroot必须严格隔离,避免桌面库污染交叉产物。

Qt Creator 工程环境装配关系图 Qt Creator IDE 编辑 / 构建 / 调试 Kit 构建套件 Qt版本+编译器+调试器 Desktop Kit PC仿真验证 Cross Kit ARM目标机 交叉编译工具链 arm-linux-gnueabihf-g++ sysroot / 目标Qt库 gdb-multiarch 调试器 版本控制 Git 仓库 + .gitignore 分支:main / dev / hmi Tag:v1.0.0 发布基线 工程目录规范 src / include / ui resources / config / deploy build 目录独立于源码 构建输出流向 源码工程 → Desktop Kit → build-desktop/ → PC运行验证 源码工程 → Cross Kit → build-arm/ → scp部署到HMI → 目标机运行

二、方法流程:从安装到可运行的最小闭环

  1. 安装Qt Creator与Qt库:推荐使用Qt Online Installer,选择Qt 5.15 LTS或Qt 6.x LTS。工业项目若目标板Qt版本固定,应选择与目标板一致的Qt版本,避免ABI差异。
  2. 配置编译器与调试器:在“工具→选项→Kits”中确认Desktop Kit的编译器为MinGW或GCC,调试器为gdb。交叉编译时需手动添加交叉g++和gdb路径。
  3. 创建Kit:分别建立Desktop Kit和Cross Kit,指定Qt版本、编译器、调试器、sysroot和设备。
  4. 验证Kit:新建Qt Widgets工程,分别用两个Kit构建,确认Desktop可运行、Cross可生成ARM可执行文件。
  5. 接入版本控制:初始化Git仓库,添加.gitignore,提交初始工程。
# 交叉编译工具链示例(Ubuntu)
sudo apt install g++-arm-linux-gnueabihf gdb-multiarch

# 验证交叉编译器
arm-linux-gnueabihf-g++ -v

# 在Qt Creator中配置qmake路径
/home/user/qt-arm/bin/qmake

# 构建ARM版本
mkdir build-arm && cd build-arm
qmake ../HmiDemo.pro -spec linux-arm-gnueabihf-g++
make -j4

# 部署到目标机
scp HmiDemo root@192.168.1.50:/opt/hmi/
ssh root@192.168.1.50 "export LD_LIBRARY_PATH=/opt/qt/lib; /opt/hmi/HmiDemo"

三、工程目录规范与版本控制

工业HMI工程通常包含界面、通信、报警、历史数据、配置等多个模块。若目录混乱,后期维护成本极高。建议采用“源码与构建分离、资源与配置分离、部署脚本独立”的结构。

目录用途是否纳入Git
src/核心业务源码,如通信、报警、数据采集是
include/公共头文件与接口定义是
ui/.ui界面文件与QML文件是
resources/图片、字体、qrc资源是
config/设备参数、通信配置、报警阈值是
deploy/部署脚本、systemd服务、启动脚本是
build-desktop/PC构建产物否
build-arm/ARM构建产物否
# .gitignore 示例
build-*/
*.user
*.pro.user
*.o
*.so
*.a
moc_*.cpp
ui_*.h
qrc_*.cpp
.DS_Store
建议在工程根目录放置 README.md,记录Qt版本、交叉工具链版本、目标板IP、部署路径和启动命令。这样换一台电脑或换一位同事,也能在半小时内复现环境。

四、常见误区与复盘

  • 误区一:Desktop和Cross共用一个构建目录。会导致moc文件、目标文件混用,出现“桌面能跑、ARM报错”的诡异问题。应使用build-desktop和build-arm两个独立目录。
  • 误区二:交叉编译只换编译器,不换Qt库。目标板上的Qt库必须与交叉编译时链接的Qt版本一致,否则运行时报“version `Qt_5' not found”。
  • 误区三:把build目录提交到Git。构建产物体积大且与机器相关,应通过.gitignore排除。
  • 误区四:忽略sysroot。交叉编译时头文件和库路径应指向目标板sysroot,而不是宿主机的/usr/include。
在工业现场,目标板Qt库版本往往由厂商镜像决定。搭建环境前,先在目标板执行 qmake -v 和 ldd --version,确认Qt版本、glibc版本和编译器ABI,再反向选择宿主机工具链,可避免大量兼容性问题。

完成本章环境搭建后,应达到以下验收标准:Qt Creator能正常启动;Desktop Kit可编译运行示例工程;Cross Kit可生成ARM可执行文件;Git仓库已初始化并完成首次提交;工程目录符合规范且build目录未被跟踪。这套环境是后续组态界面开发、通信驱动集成和现场部署的基础,建议在项目开始前就固定下来,并形成团队统一的环境配置文档。