为助力开发者高效开展创龙科技研发评估板的 Qt 应用开发,本文聚焦 Qt 工程编译与 GPU 核心应用,详解两种编译方式的配置与操作步骤,说明 Qt 程序在评估板的运行与自启动方法,同时通过案例演示 GPU 图形渲染功能,帮助开发者快速掌握相关技术要点,为评估板 Qt 应用开发与性能优化奠定基础。
本文档主要说明如何将已有Qt工程进行编译,生成可在评估板上正常运行的ARM端Qt程序镜像。
Qt开发环境主要包括Qt Creator工具、X86端Qt环境、ARM端Qt环境、交叉编译工具链等。当用户使用Qt Creator工具和X86端Qt环境编写并编译Qt工程后,生成的Qt程序镜像仅可在X86端运行。必须使用适配评估板的ARM端Qt环境、交叉编译工具链编译Qt工程,生成的Qt程序镜像方可在ARM端(即评估板)上正常运行。
LinuxSDK开发包中已提供适配评估板的ARM端Qt环境(Qt-5.15.8),请先参考Debian系统使用手册安装、编译LinuxSDK,构建适配评估板的交叉编译工具链和qmake工具。可基于命令行或Qt Creator工具对已有Qt工程进行编译,生成ARM端Qt程序镜像。
创龙科技提供的Qt工程位于产品资料“4-软件资料\Demo\qt-demos\”目录下,其中src目录下包含Qt工程源码,bin目录下包含ARM端Qt程序镜像。请将整个qt-demos文件夹拷贝至Ubuntu工作目录下,如下图所示。
本文档以image_display工程为例进行演示,此工程的功能是通过显示屏在Qt界面上显示图片内容,并可实现竖屏显示功能。
进入image_display工程源码目录,配置交叉编译工具链环境变量,执行qmake命令生成Makefile文件,再执行make命令编译生成可在评估板上正常运行的ARM端Qt程序镜像,如下图所示。
Host# cd qt-demos/image_display/src/
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/x86_64-linux/bin/qmake
Host# make
请先自行下载、安装Qt Creator工具至Ubuntu,执行如下命令启动Qt Creator(本次操作使用Qt Creator版本为4.11.0)。
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# qtcreator
启动Qt Creator工具后,点击菜单栏"Tools -> Options…"。
点击"Compilers -> Add -> GCC -> C++ -> Browse…",选择平台交叉编译工具链中的aarch64-linux-gnu-g++,然后点击Open确认。具体路径为:
/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/extra-tools/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g+
选择后,Name修改为"RK3588-GCC",ABI选择"arm-linux-generic-elf-64bit",再点击Apply,如下图所示。
点击"Qt Versions -> Add",选择平台qmake,然后点击Open确认。具体路径为:
/home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/x86_64-linux/bin/qmake
选择后,Version name修改为"RK3588-qt5"再点击Apply,如下图所示。
请参照下图配置Kits各选项。点击"Kits -> Add",将Name修改为RK3588",Device type选择"Generic Linux Device",Compiler的C++选择"RK3588-GCC",Debugger选择"None",Qt version选择"RK3588-qt5",点击Apply,然后点击OK完成配置。
点击"Projects -> Open"。
选中Qt工程源码目录中.pro文件,点击Open。
勾选RK3588平台Kits,点击"Configure Project"进行工程配置,如下图所示。
右击Qt工程,点击Build进行Qt工程编译。
编译完成后,将生成可在评估板上运行的ARM端Qt程序镜像,如下图所示。
评估板默认支持HDMI显示,请通过HDMI线将HDMI显示屏与评估板HDMI OUT接口连接。如需全屏显示,请将鼠标与评估板USB2.0 HOST双层任一接口连接,点击窗口栏放大即可。
评估板上电启动,进入评估板文件系统,将ARM端Qt程序镜像拷贝至评估板文件系统任意目录下,同时将image_display工程bin目录下文件名为test.jpg的JPG格式图片拷贝至相同路径。请在Qt程序镜像所在路径下执行如下命令。
(1)查看程序运行参数。
Target# ./image_display
参数解释
image path:图片路径。
rotation:该参数为1,则竖屏显示。
(2)横屏显示图片。
执行如下命令,显示屏将显示如下图像,按"Ctrl + C"退出程序。
Target# ./image_display ./test.jpg
(3)竖屏显示图片。
执行如下命令,显示屏将显示如下图像,按"Ctrl + C"退出程序。
Target# ./image_display test.jpg 1
本章节以led_control案例为例,演示Qt程序自启动功能。led_control案例功能是通过显示屏在Qt界面上显示LED控制按钮,用于控制LED亮灭。
将案例bin目录下可执行程序拷贝至评估板文件系统"/root/"目录下。进入评估板文件系统执行如下命令,在"/etc/default/"目录下新建qtapp文件,并添加如下内容设置Qt程序运行依赖环境变量。
Target# vi /etc/default/qtapp
UNTIME_DIR=/run/user/0
DISPLAY=":0"
QT_ROOT=/usr/lib/qt-5.15.8
QT_QPA_FONTDIR=/usr/share/fonts
QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt-5.15.8/plugins
QT_PLUGIN_PATH=/usr/lib/qt-5.15.8/plugins
LD_LIBRARY_PATH=/usr/lib/qt-5.15.8/lib:/usr/lib/qt-5.15.8/plugins/platform
执行如下命令,在"/etc/systemd/system/"目录下新建qtapp.service文件,并添加如下内容设置Qt程序自启动服务依赖关系以及Qt程序的路径。
Target# vi /etc/systemd/system/qtapp.service
[Unit]
Description=Qt App Service
Requisite=display-manager.service
After=display-manager.service
[Service]
EnvironmentFile=-/etc/default/qtapp
ExecStart=/root/led_control -n 2
Restart=always
[Install]
WantedBy=multi-user.target
执行如下命令使能qtapp.service,然后执行reboot命令重启系统,即可从HDMI显示屏看到Qt程序自启动成功。
Target# systemctl enable qtapp
Target# reboot
如需禁止Qt程序自启动,请执行如下命令。
Target# systemctl disable qtapp
本章节通过textures案例,演示基于Qt + OpenGL调用GPU核心进行图形渲染。
本案例使用Qt提供的OpenGL模块,该模块是对OpenGL原生API进一步的封装并支持GUI编程,使得在Qt应用程序中使用OpenGL变的更加容易。
Qt程序在调用OpenGL模块的API时,会调用官方提供的OpenGL库,该库通过底层驱动调用GPU资源来进行图像的渲染。
评估板默认支持HDMI显示,请将HDMI显示器与评估板HDMI OUT接口连接,同时将鼠标与评估板USB2.0 HOST双层任一接口连接。
评估板上电启动,将textures案例的ARM端Qt程序镜像拷贝至评估板文件系统。并执行如下命令运行Qt程序。
Target# ./textures
Qt程序运行后,显示界面如下,使用鼠标点击任意一个骰子,被选中的骰子将自动进行旋转。
(1)初始化主窗口,创建6个Qopenglwidget,并开启定时器。
(2)初始化OpenGL资源。
(3)处理QMouseEvent事件。
(4)使用OpenGL进行绘制。
(5)OpenGL部件大小调整时,触发resizeGL事件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。