2. 第一个嵌入式Qt程序
任务目标
在嵌入式Linux开发板上运行第一个Qt Widgets程序,界面中央显示文本“Hello Embedded Linux”。本案例覆盖从PC端编写源码、交叉编译到开发板部署运行的完整最小闭环。
环境与依赖
- PC端:Ubuntu 20.04/22.04 x86_64,已安装交叉编译工具链(如arm-linux-gnueabihf-g++)
- Qt源码:与开发板匹配的Qt 5.15.2交叉编译版本,安装于
/opt/qt-5.15.2-arm - 开发板:ARM Cortex-A7/A9核心板,运行Linux内核,具备Qt运行所需库(libQt5Widgets.so.5等)
- 传输方式:NFS挂载或scp拷贝可执行文件到开发板
关键完整代码
创建文件 main.cpp,代码如下:
#include <QApplication>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label("Hello Embedded Linux");
label.setAlignment(Qt::AlignCenter);
label.resize(400, 240);
label.show();
return app.exec();
}
编译与部署
创建 hello.pro 工程文件:
QT += widgets
SOURCES = main.cpp
TARGET = hello
在PC端执行交叉编译(假设Qt安装路径为 /opt/qt-5.15.2-arm):
/opt/qt-5.15.2-arm/bin/qmake hello.pro
make
编译完成后将生成的 hello 可执行文件拷贝到开发板(以NFS挂载为例):
cp hello /nfs/rootfs/home/
# 开发板上执行:
export LD_LIBRARY_PATH=/usr/lib/qt5/lib:$LD_LIBRARY_PATH
/home/hello -platform linuxfb
验证方法与通过条件
- 开发板屏幕出现400×240像素窗口,窗口中央显示白色文本“Hello Embedded Linux”
- 窗口背景为默认灰色,文本清晰无乱码,窗口可正常关闭(Ctrl+C终止进程)
- 若屏幕无显示,执行
echo $DISPLAY确认无X服务,使用-platform linuxfb指定帧缓冲平台即可 - 若提示缺少Qt库,检查
LD_LIBRARY_PATH是否指向开发板上Qt库实际安装目录
常见问题
- qmake版本错误:确认使用的是交叉编译版qmake(
/opt/qt-5.15.2-arm/bin/qmake -v),而非PC版 - 字体不显示:开发板需包含中文字体文件(如
wqy-microhei.ttc),本案例仅显示英文,若需中文需将字体文件拷贝至/usr/share/fonts/并执行fc-cache - 触摸无响应:本案例未启用触摸事件处理,仅验证显示功能,触摸输入需另行配置
tslib环境变量