嵌入式图形支持¶
特性介绍¶
Qt5+Wayland 框架简介
图形栈框架:
openEuler Embedded 图形栈主要包
构建指南¶
构建兼容了 meta-openeuler、poky/meta、meta-raspberrypi、meta-qt5、meta-openembedded 等层,目前只支持 systemd 的启动方式,支持在树梅派、rk3568平台构建,构建流程如下:
# 树梅派构建
$ oebuild -p raspberrypi4-64 -f systemd -f openeuler-qt -d ras-qt
# ok3568构建
$ oebuild -p ok3568 -f systemd -f openeuler-qt -d ok3568-qt
# ryd-3568构建
$ oebuild -p ryd-3568 -f systemd -f openeuler-qt -d ryd-3568-qt
# 进入交互构建终端
$ oebuild bitbake
# 执行构建
$ bitbake openeuler-image
# sdk构建
$ bitbake openeuler-image -c populate_sdk
使用方法¶
image 中集成了一些 demo 程序用于测试功能是否正常,如下:
程序名 |
作用 |
---|---|
kmscube |
测试驱动(kms/drm)功能,在普通窗口界面运行; |
qt5-opengles2-test |
测试 Qt5 OpenGL ES 2.0渲染; |
helloworld-gui |
Qt5 helloworld 程序; |
在openEuler Embedded系统中运行 demo 程序。
普通窗口界面:
# kmscube
# qt5-opengles2-test --platform eglfs
weston 窗口界面:
# qt5-opengles2-test --platform wayland
# helloworld-gui --platform wayland-egl
qt5-opengles2-test –platform eglfs 执行效果图:
weston 执行效果图:
helloworld-gui –platform wayland 执行效果图:
SDK 编译 qt 程序样例¶
准备代码
qmake 运行时以硬编码的方式加入库路径,意味着 qmake 一旦生成很多变量就写死了,需要编写 qt.conf 文件放在 qmake 二进制的同级目录。
编写
qt.conf
文件,源码如下:[Paths] prefix = xxx/sysroots/cortexa72-openeuler-linux Headers = xxx/sysroots/cortexa72-openeuler-linux/usr/include Libraries = xxx/sysroots/cortexa72-openeuler-linux/usr/lib64 HostData = xxx/sysroots/cortexa72-openeuler-linux/usr/lib64 Sysroot = xxx/sysroots/cortexa72-openeuler-linux TargetSpec = linux-oe-g++xxx 表示 SDK 所在目录的前缀。
可通过
qt.conf
设置 Binaries 字节来配置二进制所在路径,如 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!”。