3.20. sample_qt 使用说明
3.20.1. 功能概述
sample_qt 是
验证
显示 路径:Qt 通过 eglfs/DRM 直接 渲染 到 屏幕,验证 DRM 显示 链路 是否 正常 工作。 验证
输入 路径:通过 触摸屏、鼠标 或 键盘 等 输入 设备 与 界面 交互,验证 输入 事件 是否 能 被 Qt 程序 正确 接收 和 处理。 参考
实现:为 后续 在 本 平台 上 开发 Qt 图形 应用 提供 基础 工程 模板 和 代码 参考。
3.20.1.1. 软件架构说明
sample_qt 的

从上到下
main.cpp源码层:包含 qt_main、“初始化 Qt 应用”、“创建界面”、“进入 事件 循环”等 步骤,通过 这些 函数 依次 完成 Qt 应用 初始化、界面 创建 并 最终 进入 事件 循环。 Qt 框架
层:由 QGuiApplication/QApplication对象、界面窗口 和 控件、Qt 输入 事件 分发、Qt 渲染 处理 等 模块 组成,负责管理 应用 生命周期、展示 界面 以及 处理 来自 用户 的 输入 事件。 Qt 平台
插件 层:包含 eglfs平台插件 和 evdev输入插件,前者 将 Qt 的 渲染 结果 输出 到 DRM/KMS 提供 的 显示 设备 上,后者 从 输入 设备 中 读取 事件 并 交给 Qt 框架 进行 分发。 显示
与 输入 硬件 层:底部 为 DRM/KMS 子系统( /dev/dri)及其下方 的 底层 显示 驱动、面板 和 桥接 芯片 驱动(如 panel-wh-cm480等),以及触摸屏、鼠标、键盘 等 输入 设备( /dev/input/event*),共同完成最终 的 图像 显示 和 输入 采集。
3.20.1.2. 代码位置及目录结构
代码
位置: app/samples/platform_samples/sample_qt目录
结构:
sample_qt/
├── README.md
├── eglfs_kms_config.json
├── main.cpp
├── run.sh
└── Makefile.bak
main.cpp:Qt 应用程序入口 及 主要 逻辑 代码。 eglfs_kms_config.json:eglfs KMS 相关配置文件,用于 指定 输出设备、分辨率 等 参数(具体内容 以 实际 文件 为准)。 run.sh:在开发 环境中运行 示例 程序 的 辅助 脚本。 README.md:源码目录 下 的 简要 说明 文档。 Makefile.bak:备份的 Makefile 文件,实际 编译 时 需要 更名 为 Makefile文件。
3.20.1.3. API 流程说明

本
Qt 应用
初始化: 在
main.cpp中创建 QGuiApplication或QApplication对象,完成 Qt 运行环境 的 基础 初始化(包括 平台 插件、字体、翻译 等)。
界面
创建 和 渲染: 创建
主 窗口 或 场景,添加 基本 控件 或 绘制 元素,用于 展示 Qt 渲染 效果 和 输入 响应。 设置
窗口 为 全屏 显示,适配 当前 DRM 输出 的 分辨率。
平台
与 显示 适配: 通过 Qt 的
eglfs平台插件,将 渲染 目标 绑定 到 DRM framebuffer,并 根据 eglfs_kms_config.json的配置 选择 输出设备 和 模式。
事件
循环 与 输入 处理: 进入 Qt 主
事件 循环,持续 从 /dev/input/event*等设备 读取 输入 事件(通过 Qt 输入 插件 完成),并分 发给 对应 的 窗口 和 控件。
资源
释放 与 退出: 用户
退出 程序 或 系统 发出 退出 信号 时,Qt 应用 退出 事件 循环,释放 窗口 和 相关 资源,最终 正常 结束 进程。
如需main.cpp 源码
3.20.2. 编译部署
3.20.2.1. 编译
sample_qt 作为 BSP 工程
整体
编译 BSP(包括 所有 示例):
./bd.sh
仅
编译 app/samples/platform_samples下的 示例(包含 sample_qt):
./bd.sh app samples/platform_samples
详细
程序 编译 方式 请 查阅 编译 方法 章节。
⚠️ 重要
提醒:如需 运行 sample_qt 示例,必须 使用 带有 QT5 支持 包 的 根 文件系统! 当前 BSP 默认
提供 的 rootfs 镜像(system rootfs)不 含 QT5 相关 ,直接库 和 依赖 刷写 后 无法 运行 。请任何 Qt 程序 务必 参考 “制作 QT支持 包 ” 一节,编译并 刷写 包含 QT5 支持 的 专用 rootfs 镜像,否则 Qt 示例 将 无法 使用。 此外,
sample_qt源码目录 中 默认 仅 提供 Makefile.bak文件,实际编译 示例 前 请 先 重命名 为 Makefile。
3.20.2.2. 程序部署
完成 BSP 编译/app/platform_samples/sample_qt 目录
可执行程序:
/app/platform_samples/sample_qt/sample_qt
如果sample_qt 目录(包括/userdata 等
chmod +x sample_qt
./sample_qt
3.20.3. 运行
3.20.3.1. 程序运行方法
在
确认 DRM 设备
节点: 使用
命令 检查 是否 存在 /dev/dri相关设备 节点:
ls /dev/dri如果
不 存在 /dev/dri设备节点,需要 先 加载 相关 内核模块:
modprobe drm_kms_helper modprobe vs_x5_syscon_bridge modprobe vs_drm modprobe panel-wh-cm480 modprobe panel-jc-050hd134 modprobe sii902x modprobe lontium-lt8618
配置 Qt 平台
插件(如 有 需要): 本
示例 使用 drm eglfs显示栈,如果 系统 中未 默认 启用 eglfs,可以在 运行 前 设置 环境变量:
export QT_QPA_PLATFORM=eglfs
确认
输入 设备: 检查
触摸屏、鼠标、键盘 等 输入 设备 是否 在 系统 中 可见:
ls /dev/input/event*在
板端 运行 程序: 从
安装 目录 直接 运行:
cd /app/platform_samples/sample_qt ./sample_qt
也
可以 使用 run.sh脚本运行:
./run.sh
3.20.3.2. 程序参数选项说明
无
3.20.3.3. 运行效果
成功sample_qt 后,开发板
界面
左上角 会 显示 提示 文字: 选择操作:提示
文字 下方 纵向 排列 4 个 按钮,每个 按钮 占 一 整行,按钮 上 的 文字 依次 为: 按钮 1:提示按钮 2:问候按钮 3:关于按钮 4:关闭
按钮
采用 条状 布局,整体 背景 为 深色,按钮 区域 为略 浅 的 条带,并 配以 浅色 文字,便于 在 屏幕 上 清晰 辨认。
在
当前
被 点击 的 按钮 会 有 明显 的 高亮 或 状态 变化,表示 已经 被 选中。 程序
根据 按钮 功能 执行 对应 逻辑,例如: 点击“按钮 1:提示”显示
提示信息。 点击“按钮 2:问候”显示
问候 信息。 点击“按钮 3:关于”显示
关于 信息。 点击“按钮 4:关闭”则
退出 示例 程序 并 关闭 界面。
在
root@buildroot:/app/platform_samples/sample_qt# ./run.sh
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
如果sample_qt 示例
3.20.4. 常见问题
3.20.4.1. 启动时报错找不到 DRM 设备或 Qt 平台插件
问题
描述: 执行
./sample_qt后提示 无法 打开 DRM 设备,或 提示 找 不到 eglfs平台(如 “Could not find the Qt platform plugin “eglfs”” 等)。
可能
原因: 内核
未 加载 相关 DRM/显示 驱动,导致 /dev/dri设备节点 不 存在。 Qt 运行
环境 未 正确 配置 eglfs平台插件。
解决
方法: 按“程序运行
方法”章节 中 的 步骤,检查 并 加载 以下 内核模块: modprobe drm_kms_helper modprobe vs_x5_syscon_bridge modprobe vs_drm modprobe panel-wh-cm480 modprobe panel-jc-050hd134 modprobe sii902x modprobe lontium-lt8618
如
有 必要,设置 Qt 平台 环境变量: export QT_QPA_PLATFORM=eglfs