Qt在嵌入式领域,特别是嵌入式Linux中,是主流的图形用户界面(GUI)开发框架之一。它优秀的跨平台特性、丰富的API和完善的开发工具,让开发者能够用一套代码适配不同硬件和操作系统,大大提升了开发效率。
下面从核心概念、环境搭建、交叉编译、程序部署到进阶方向,为你系统地梳理Qt嵌入式开发的全流程。
一、核心概念与优势
在开始动手前,了解Qt在嵌入式领域的定位和优势,能帮你更好地理解后续的步骤。
-
跨平台框架 :Qt是一个用C++编写的应用程序框架。你可以在Windows或Linux的PC上编写代码,然后通过交叉编译,生成能在ARM架构的嵌入式板卡上运行的程序。这套代码基本不需要修改,就可以在多个平台编译运行。
-
软件框架特点:Qt拥有完备的图形库和丰富的模块,支持C++、Python、QML等多种语言。除了基础的图形界面,它还集成了网络、数据库、多媒体等模块,非常适合复杂的嵌入式产品开发。
-
主流应用场景:Qt广泛应用于工业自动化的人机交互界面(HMI)、汽车仪表盘、医疗设备显示器以及各种物联网设备中。
二、开发环境搭建:PC端与交叉编译链
开发环境通常由一台性能强大的PC(称为"宿主机")和一块目标嵌入式板卡(称为"目标机")构成。你需要在PC上模拟目标机的环境进行编译。
-
在PC端安装Qt Creator
首先,在PC的Linux系统(如Ubuntu 20.04/18.04)上安装Qt Creator IDE。你可以从Qt官网下载在线安装程序,或从发行版的软件仓库安装。
bash
# Ubuntu上通过命令行安装示例
sudo apt update
sudo apt install build-essential qtcreator qt5-default
请注意:Qt具有不同的许可证(商业版/开源版),商业版的"Qt for Device Creation"提供了预构建的系统镜像和更完善的工具链支持。
-
准备交叉编译工具链
交叉编译 是嵌入式开发的核心。由于嵌入式板卡(目标机)性能有限,无法直接在上面编译大型程序,我们需要在强大的PC(宿主机)上,用特定的工具链编译出目标机能运行的代码。你需要根据板卡的架构(如ARMv7, ARMv8)安装对应的交叉编译工具链,例如gcc-aarch64-linux-gnu。bash# 安装ARM 64位交叉编译工具链示例 sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
三、核心环节:Qt的交叉编译
交叉编译是整个流程中最关键也最复杂的环节。你需要为目标板卡编译一套完整的Qt库,这通常包括以下步骤:
-
获取Qt源码 :从Qt官网下载适用于嵌入式平台的源码包(如
qt-everywhere-src-5.15.2.tar.xz)。 -
配置编译选项 :在PC上解压源码,并运行
configure脚本,通过大量参数指定目标架构、编译器和需要/不需要的功能模块。bash# 配置示例 (针对ARM Cortex-A7) ./configure -prefix /opt/qt-5.15.2-arm \ -opensource \ -confirm-license \ -xplatform linux-arm-gnueabi-g++ \ -nomake examples \ -nomake tests \ -no-opengl \ -linuxfb-
-prefix:指定编译结果的安装路径。 -
-xplatform:最重要的参数,指定目标平台配置文件,告诉编译系统使用哪个交叉编译器。 -
-linuxfb:启用Linux Framebuffer插件,这是Qt在无显示服务器的嵌入式设备上常用的显示后端。
-
-
编译和安装 :配置无误后,执行
make和make install。编译过程可能耗时较长(数小时),之后在-prefix指定的目录下就会生成完整的、适用于目标板的Qt库。
四、部署与测试:从PC到板卡
编译完成后,需要将库和程序部署到板卡上运行。
-
准备目标板卡环境
将上一步编译好的Qt库(如
/opt/qt-5.15.2-arm整个目录)打包,并传输到板卡的文件系统中(如/opt/下)。同时,还需要移植和配置触摸屏库tslib,以确保触摸功能正常。bash# 在板卡上解压并配置环境变量 (在 /etc/profile 中添加) export QT_ROOT=/opt/qt-5.15.2-arm export PATH=$QT_ROOT/bin:$PATH export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0 # 指定使用framebuffer export QT_QPA_FB_TSLIB=1 # 启用tslib触摸支持 export TSLIB_TSDEVICE=/dev/input/event1 # 指定触摸屏设备配置完成后,执行
source /etc/profile使环境变量生效。 -
编译并运行你的第一个Qt程序
回到PC端,在Qt Creator中新建一个简单的Qt Widgets项目(例如一个窗口应用)。在项目构建套件(Kit)设置中,选择你刚才配置好的交叉编译工具链和Qt版本,然后编译。编译生成的可执行文件(ARM架构)通过SSH或U盘传输到板卡上,添加执行权限后直接运行即可。
bash# 在板卡上运行你的程序 chmod +x your_qt_app ./your_qt_app
下面这张流程图可以帮你从全局上把握整个开发流程:

五、进阶方向与商业方案
当你熟悉了基础流程后,可以探索更高效的开发方式:
-
使用Buildroot/Yocto集成Qt:这两个是嵌入式Linux的构建系统,可以自动下载、配置和编译交叉编译工具链、Qt库、以及整个根文件系统,实现更自动化和可重复的构建。
-
商业级方案:Boot to Qt:Qt公司提供的商业产品,它提供了一个包含了Qt库、图形驱动和窗口系统的完整嵌入式系统镜像。你可以直接将它烧录到SD卡上启动板卡,省去了手动移植库的繁琐步骤。Qt Creator能通过网络自动识别板卡,实现"编写->编译->部署->运行"的一键式流程,极大提升开发效率。
-
典型应用案例:在实际项目中,Qt常结合MQTT等协议实现物联网数据采集与显示,或通过FFmpeg库实现视频播放功能。
总结
Qt嵌入式开发的核心在于交叉编译。你需要先搭建好PC端的开发环境,为目标板卡编译一套Qt库,然后部署到板卡上。虽然环境搭建和首次编译有些繁琐,但一旦打通,后续的应用开发就会变得非常高效。