
嵌入式 Qt 典型场景ARM 架构 Linux 开发板ARM32/ARM64。整体流程搭建交叉编译链 → 交叉编译 Qt 源码 → 开发板环境配置驱动 / 字体 / 触摸→ 应用编译与部署。一、整体架构说明编译主机PC Ubuntu / CentOSx86_64目标板ARM Linux如 IMX6、RK3588、全志等方式源码交叉编译 Qt 应用交叉编译 板端运行时环境部署二、第一步准备交叉编译环境1. 安装交叉编译器以 ARM-linux-gcc 为例解压并配置环境变量bash运行# 临时生效 export PATH$PATH:/opt/arm-gcc/bin # 永久生效写入 ~/.bashrc source ~/.bashrc # 测试 arm-linux-gcc -v2. 依赖库准备主机安装编译依赖bash运行sudo apt install libxcb* libx11-dev libgl1-mesa-dev build-essential bison flex三、第二步Qt 源码交叉编译核心步骤1. 获取 Qt 源码推荐 Qt5.15 / Qt6 长期版本下载源码并解压。2. 编写交叉编译配置脚本build.shbash运行#!/bin/sh ./configure \ -prefix /opt/qt-arm \ # 编译输出目录 -embedded arm \ # 目标架构 -xplatform linux-arm-gnueabi-g \ # 交叉编译配置文件 -shared \ # 动态库 -opensource -confirm-license \ -no-xcb \ # 嵌入式不使用xcb -no-opengl \ # 根据板子GPU选择开启/关闭 -widgets \ -sql-sqlite \ # 内置SQLite -make libs -nomake examples -nomake tests make -j8 make install3. 关键说明xplatform对应qtbase/mkspecs/下的交叉配置文件根据编译器修改qmake.conf内编译器路径按需裁剪-nomake examples -nomake tests减小体积有硬件 GPU 则开启 OpenGL无 GPU 关闭。4. 编译完成在-prefix指定目录生成 ARM 版本 Qt 库、qmake、工具链。四、第三步嵌入式应用交叉编译使用编译出的 ARM 版qmake编译业务工程bash运行# 进入工程目录 /opt/qt-arm/bin/qmake make得到 ARM 架构可执行程序。五、第四步开发板环境部署系统侧配置将 Qt 运行时库、字体、插件拷贝到开发板。1. 拷贝 Qt 动态库与插件把主机/opt/qt-arm/lib、plugins目录完整拷贝到开发板/usr/local/qt/。2. 配置板端环境变量/etc/profilebash运行# Qt 库路径 export LD_LIBRARY_PATH/usr/local/qt/lib:$LD_LIBRARY_PATH # Qt 插件路径 export QT_PLUGIN_PATH/usr/local/qt/plugins # 嵌入式平台变量 export QTDIR/usr/local/qt执行source /etc/profile生效。六、触摸屏适配嵌入式高频问题问题现象触摸无反应、坐标错位、单点变多点、光标乱跑。1. 输入平台选择嵌入式 Linux 触摸常用evdev 输入插件。启动程序前指定环境变量bash运行# 使用Linux原生输入子系统 export QT_QPA_PLATFORMlinuxfb:tty/dev/fb0 export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS/dev/input/event0/dev/fb0帧缓冲设备/dev/input/event0触摸事件节点根据实际板子调整2. 坐标校准触摸坐标颠倒 / 偏移使用 Qt 自带校准工具或板子原厂触摸校准程序。bash运行# 部分版本提供触摸校准 ts_calibrate3. 多点触摸确认内核已开启多点触摸驱动Qt 输入插件默认支持。七、字体部署中文乱码、方框□ 解决现象英文正常中文显示为方框、问号本质缺少中文字体文件。解决方案准备开源中文字体NotoSansCJK、文泉驿、微软雅黑等ttf/ttc文件在板端 Qt 库目录下创建字体文件夹bash运行mkdir -p /usr/local/qt/lib/fonts将字体文件放入该目录配置字体路径环境变量bash运行export QT_FONTDIR/usr/local/qt/lib/fonts代码内指定字体兜底方案cpp运行QFont font(Noto Sans CJK SC); a.setFont(font); // a 为 QApplication八、启动脚本与自启动编写启动脚本start_app.shbash运行#!/bin/sh # 环境变量 export LD_LIBRARY_PATH/usr/local/qt/lib export QT_PLUGIN_PATH/usr/local/qt/plugins export QT_FONTDIR/usr/local/qt/lib/fonts export QT_QPA_PLATFORMlinuxfb:tty/dev/fb0 # 运行程序 ./my_app添加执行权限chmod x start_app.sh开机自启动将脚本加入/etc/rc.local或系统开机服务。九、常见问题排错error while loading shared libraries原因找不到 Qt 动态库 → 检查LD_LIBRARY_PATH。无法打开 /dev/fb0原因帧缓冲未启用、权限不足 →chmod 777 /dev/fb0。触摸无响应检查 event 节点、QT_QPA_PLATFORM变量、内核驱动。中文方框检查字体文件、QT_FONTDIR、字体名称是否匹配。程序运行崩溃架构不匹配ARM/x86、编译链版本不一致。小结嵌入式 Qt 移植标准流程搭建交叉编译器 → 源码交叉编译Qt → 应用交叉编译 → 板端部署库插件字体 → 配置帧缓冲/触摸环境变量 → 编写启动脚本与自启动。触摸、字体、库路径是嵌入式三大经典问题优先排查这三项。全系列收尾至此Qt 基础 → 控件 → 实战项目 → 排错优化 → 版本迁移 → 嵌入式移植全套技术博客完成覆盖桌面开发、移动端 QML、服务器后台、嵌入式 Linux 全场景可作为完整学习与项目参考文档。