嵌入式图形支持¶
Wayland 是一个新一代的图形显示服务器协议,旨在替代 X Window System,提供更好的性能、更简单的代码和更好的安全性;weston 是一个开源的 Wayland 协议的参考实现,是一个基于 OpenGL ES 的图形栈,提供了一个完整的桌面环境,包括窗口管理器、应用程序启动器、通知系统等。
Qt 是常见的嵌入式图形库之一,是一个跨平台的 C++ 应用程序开发框架,提供了丰富的图形界面组件和工具,可以用于开发桌面应用程序、嵌入式应用程序等;QtWayland 是 Qt 框架中的一个模块,用于支持 Wayland 协议,QtWayland 模块提供了一组 API,使 Qt 应用程序能够与 Wayland 协议兼容的显示服务器进行交互。
OpenEuler Embedded 系统支持使用 weston 作为窗口管理器,支持 Qt5 作为嵌入式图形库。
Wayland 框架简介¶
部分模块介绍:
openEuler Embedded 图形栈主要组成包¶
构建指南¶
构建结合了 meta-openeuler、poky/meta、meta-raspberrypi、meta-qt5、meta-oe 等层,目前只支持 systemd 的启动方式,支持在树梅派、rk3568平台构建,构建流程如下:
# 树梅派构建
$ oebuild generate -p raspberrypi4-64 -f systemd -f openeuler-qt -d ras-qt
# ok3568构建
$ oebuild generate -p ok3568 -f systemd -f openeuler-qt -d ok3568-qt
# ryd-3568构建
$ oebuild generate -p ryd-3568 -f systemd -f openeuler-qt -d ryd-3568-qt
# 进入交互构建终端
$ oebuild bitbake
# 执行构建
$ bitbake openeuler-image
# sdk构建
$ bitbake openeuler-image -c populate_sdk
Note
目前 rk3568 平台对 Qt 支持尚不完善,正在开发改进中!!!
示例¶
image 中集成了一些 demo 程序用于测试功能是否正常,如下:
程序名 |
作用 |
---|---|
kmscube |
测试驱动(kms/drm)功能,在普通窗口界面运行; |
qt5-opengles2-test |
测试 Qt5 OpenGL ES 2.0渲染; |
helloworld-gui |
Qt5 helloworld 程序; |
在openEuler Embedded系统中运行 demo 程序。
Note
Qt 程序运行时可以通过 --platform
选项来指定使用的平台插件,eglfs 与 wayland 是两种常见的平台插件。
普通窗口界面:
# kmscube
# qt5-opengles2-test --platform eglfs
wayland 插件需要在 weston 界面支持:
# weston
# qt5-opengles2-test --platform wayland
# helloworld-gui --platform wayland-egl
快速开发SDK¶
使用说明¶
Qt5 程序开发需要在主机端安装 qt5-dev
包,其中包含了 qt 库以及需要的一些工具。
# yum install qt5-devel
使用方法¶
准备代码
Qt 交叉编译需要使用交叉编译工具链和交叉编译的 Qt 库,而这些库和工具链的路径通常与本地开发环境不同。为了让 Qt 在交叉编译环境中正确地找到所需的库和工具链,需要在 Qt 安装目录(qmake程序同级目录)下创建一个名为
qt.conf
的文件,该文件包含了 Qt 在交叉编译环境中需要的配置信息。编写
qt.conf
文件,源码如下:[Paths] Prefix = /sdk_path/sysroots/cortexa72-openeuler-linux Headers = /sdk_path/sysroots/cortexa72-openeuler-linux/usr/include Libraries = /sdk_path/sysroots/cortexa72-openeuler-linux/usr/lib64 HostData = /sdk_path/sysroots/cortexa72-openeuler-linux/usr/lib64 Sysroot = /sdk_path/sysroots/cortexa72-openeuler-linux TargetSpec = linux-oe-g++Note
/sdk_path/
表示 SDK 所在目录的前缀。可通过
qt.conf
设置 Binaries 字节来配置二进制所在路径,若为/usr/bin
可不设置,如 qttools 提供二进制所在路径为/usr/lib/qt5/bin/
,则qt.conf
需新增如下行:Binaries = /usr/lib/qt5/bin HostBinaries = /usr/lib/qt5/bin编写
hello.cpp
文件,源码如下:#include<QApplication> #include<QLabel> int main(int argc,char * argv[]) { QApplication app(argc,argv); QLabel * label=new QLabel("<h2><i>Hello</i><font color=red>Qt!</font></h2>"); label->show(); return app.exec(); }编写
hello.pro
,和hello.cpp
文件放在同一个目录;也可使用 qmake 命令自动生成 pro 文件,但需要手动补充部分内容,示例:$ qmake -project
编译生成二进制
进入
hello.cpp
所在目录,使用SDK编译,命令如下:$ qmake hello.pro $ make把编译好的 qt 程序拷贝到 openEuler Embedded 系统的
/tmp/
某个目录下(例如/tmp/myfiles/
)。如何拷贝可以参考前文所述共享文件系统场景。
运行用户态程序
在 openEuler Embedded 系统中运行 qt 程序。
# cd /tmp/myfiles/ # ./hello --platform eglfs or wayland如运行成功,则会输出
Hello Qt!
。
Note
目前对 Qt5 SDK 工具支持尚不完善,正在开发改进中!!!