Difference between revisions of "Template:FriendlyCoreRK3399QtDev"

From FriendlyELEC WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
Line 1: Line 1:
 
===开发Qt程序===
 
===开发Qt程序===
  
FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持GPU硬件加速的OpenGL ES 2.0,只是调用方式不同,描述如下:<br>
+
FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持OpenGL ES和GPU硬件加速,只是调用方式不同,具体如下:<br>
 
* KMS – 使用Linux内核的DRM显示接口来渲染界面<br>
 
* KMS – 使用Linux内核的DRM显示接口来渲染界面<br>
 
* EGLFS – 使用OpenGL ES接口来渲染界面<br>
 
* EGLFS – 使用OpenGL ES接口来渲染界面<br>
Line 37: Line 37:
 
   | <b>Yes</b>
 
   | <b>Yes</b>
 
|}
 
|}
建议使用 KMS或XCB 插件。<br><br>
+
<b>建议使用 KMS或XCB 插件。</b><br><br>
 
为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:  
 
为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:  
 
::{| class="wikitable"
 
::{| class="wikitable"
Line 51: Line 51:
 
|/usr/bin/setqt5env-nogui||仅供无界面的Qt程序使用
 
|/usr/bin/setqt5env-nogui||仅供无界面的Qt程序使用
 
|}
 
|}
setqt5env-* 脚本的用法,例如设置KMS:
+
例如要设置用KMS插件来显示程序界面,可以使用以下命令:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
. setqt5env-kms
 
. setqt5env-kms
Line 63: Line 63:
 
* 方法2: 搭建本地交叉编译环境,本地需要安装 Ubuntu 18.04 64位系统,其环境搭建方法请参考:[[How to Build and Install Qt Application for FriendlyELEC Boards/zh]]
 
* 方法2: 搭建本地交叉编译环境,本地需要安装 Ubuntu 18.04 64位系统,其环境搭建方法请参考:[[How to Build and Install Qt Application for FriendlyELEC Boards/zh]]
  
====Qt示例====
+
====Qt示例演示====
FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,如下所示:
+
FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,下面分别介绍它们:
 
* <b>Qt QML示例:CinematicExperience</b>
 
* <b>Qt QML示例:CinematicExperience</b>
CinematicExperience是一个用Qt QML实现的专辑列表界面。<br />
+
CinematicExperience是一个用Qt QML实现的影片选择界面。<br />
例子演示了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例非常能体现硬件性能与软件优化的差异,在RK3399平台上非常流畅。<br />
+
该例子使用了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例能体现RK3399的硬件性能与软件优化,在RK3399平台上非常流畅。<br />
CinematicExperience的运行命令:<br />
+
在命令行执行以下命令启动该示例:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/Qt5_CinematicExperience
 
cd /opt/Qt5_CinematicExperience
 
./run.sh
 
./run.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
 
+
界面如下所示:<br />
运行截图:<br />
+
 
[[File:Cinematicsexperience.jpg|frameless|480px]]<br />
 
[[File:Cinematicsexperience.jpg|frameless|480px]]<br />
  
 
* <b>QQt WebEngine示例:网页浏览器</b>
 
* <b>QQt WebEngine示例:网页浏览器</b>
 
Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。<br />
 
Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。<br />
这里示例展示的网页浏览器是 Qt5 自带的Demo,示例运行命令:<br />
+
示例展示的网页浏览器是 Qt5 自带的Demo,运行命令如下:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/qt5-brower
 
cd /opt/qt5-brower
Line 85: Line 84:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
运行截图:<br />
+
界面如下所示:<br />
 
[[File:qt5-brower.jpg|frameless|480px]]<br />
 
[[File:qt5-brower.jpg|frameless|480px]]<br />
  
Line 91: Line 90:
  
 
* <b>Qt 双屏异显示例</b>
 
* <b>Qt 双屏异显示例</b>
这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容:
+
这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容, 用以下命令启动:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/qt5-multi-screen-demo
 
cd /opt/qt5-multi-screen-demo
 
./run.sh
 
./run.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
运行截图:<br />
+
双屏异显的效果如下所示:<br />
 
[[File:qt5-multi-screen.jpg|frameless|480px]]<br />
 
[[File:qt5-multi-screen.jpg|frameless|480px]]<br />
  
 
* <b>Qt Multimedia: 硬解播放器qt5-player</b>
 
* <b>Qt Multimedia: 硬解播放器qt5-player</b>
qt5-player播放器已经适配Rockchip的gstreamer插件rkximagesink,支持4K视频的硬解播放,由于rkximagesink插件只支持输出图像到X11窗口,因此 Qt 播放器程序需要使用 XCB 的显示插件来运行。<br />
+
qt5-player播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放,由于Rockchip提供的插件只支持输出图像到X11窗口,因此 Qt 播放器程序需要使用 XCB 的显示插件来运行。<br />
示例运行命令:<br />
+
在命令行执行以下命令启动该示例:<br />
先在开发板上执行命令
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/qt5-player
 
cd /opt/qt5-player
 
./run.sh
 
./run.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
运行截图:<br />
+
播放器的界面如下所示,可以设置全屏播放,也可以调节音量:<br />
 
[[File:qt5-player.gif|frameless|480px]]<br />
 
[[File:qt5-player.gif|frameless|480px]]<br />
  
* <b>QQt WebGL示例: nmapper</b>
+
* <b>Qt WebGL示例: nmapper</b>
Qt WebGL允许你将一个QML应用显示在其他设备的网页游览器上,这个特性让你做一些远程控制的应用变得很简单。<br />
+
Qt WebGL允许你在其他设备的网页游览器查看并远程操作运行在开发板上的Qt程序,这个特性使得实现远程控制变得简单。<br />
开发板需要连接网络,在开发版本执行以下命令,即可以WebGL的方式运行Qt程序:<br />
+
在运行示例之前,你的开发板需要先连接网络,然后在开发版本执行以下命令:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/qt5-nmapper
 
cd /opt/qt5-nmapper
 
./run-with-webgl.sh
 
./run-with-webgl.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
然后在电脑或者手机上打开网页游览器,敲入开发板的IP地址,应该就能看到Qt界面了,如下图所示:<br />
+
然后在电脑或者手机上打开网页游览器,在浏览器的地址栏输入开发板的IP地址,应该就能看到Qt界面了,效果如下所示:<br />
 
[[File:qtwebgl.gif|frameless|480px]]<br />
 
[[File:qtwebgl.gif|frameless|480px]]<br />
  
 
* <b>Qt VNC示例: 智能家居控制界面</b>
 
* <b>Qt VNC示例: 智能家居控制界面</b>
Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和使用你的Qt程序,支持QtWidgets和QML应用。<br />
+
Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和控制,用QtWidgets或者QML编写的应用都是支持的。<br />
先在开发版本执行以下命令,以webgl的方式运行应用Qt应用:<br />
+
执行以下命令启动:<br />
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cd /opt/qt5-smarthome
 
cd /opt/qt5-smarthome
 
./run-with-vnc.sh
 
./run-with-vnc.sh
 
</syntaxhighlight>
 
</syntaxhighlight>
然后在电脑或者手机打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到智能家居控制界面了,如下图所示:<br />
+
然后在电脑或者手机上安装并打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到界面了,如下图所示:<br />
 
[[File:qt5smarthomevnc.png|frameless|480px]]<br />
 
[[File:qt5smarthomevnc.png|frameless|480px]]<br />

Revision as of 14:43, 25 July 2018

1 开发Qt程序

FriendlyELEC为RK3399平台移植的 Qt 5.10.0 支持以下显示设备插件:KMS、EGLFS和XCB,这三种插件均支持OpenGL ES和GPU硬件加速,只是调用方式不同,具体如下:

  • KMS – 使用Linux内核的DRM显示接口来渲染界面
  • EGLFS – 使用OpenGL ES接口来渲染界面
  • XCB – 在X11服务器上运行,并集成到X11窗口环境


三种插件所支持的Qt特性会有所不同,请根据你的需求来选择:

插件名称 OpenGL ES QtWebEngine QtMultimedia 视频硬解播放 双屏异显
KMS Yes No Yes No Yes
EGLFS Yes No Yes No No
XCB Yes Yes Yes Yes Yes

建议使用 KMS或XCB 插件。

为了方便用户测试,FriendlyCore平台提供了4个脚本文件用于设置Qt环境变量,分别为:

脚本文件名 作用
/usr/bin/setqt5env-kms 设置kms插件所需要的环境变量
/usr/bin/setqt5env-eglfs 设置eglfs插件所需要的环境变量
/usr/bin/setqt5env-xcb 设置xcb插件所需要的环境变量
/usr/bin/setqt5env-nogui 仅供无界面的Qt程序使用

例如要设置用KMS插件来显示程序界面,可以使用以下命令:

. setqt5env-kms
./apps

(注: .与字母s之间有个空格)

1.1 Qt开发环境搭建

FriendlyELEC为RK3399平台提供了两种交叉编译Qt程序的方法:

1.2 Qt示例演示

FriendlyCore系统内置了几个很有特色的Qt演示程序,方便测试Qt5的特性,下面分别介绍它们:

  • Qt QML示例:CinematicExperience

CinematicExperience是一个用Qt QML实现的影片选择界面。
该例子使用了Qt QML中的界面动态转换、粒子模拟和着色器特效,所以这个示例能体现RK3399的硬件性能与软件优化,在RK3399平台上非常流畅。
在命令行执行以下命令启动该示例:

cd /opt/Qt5_CinematicExperience
./run.sh

界面如下所示:
Cinematicsexperience.jpg

  • QQt WebEngine示例:网页浏览器

Qt WebEngine使用了Chromium作为渲染引挚,对HTML5支持完美。
示例展示的网页浏览器是 Qt5 自带的Demo,运行命令如下:

cd /opt/qt5-brower
./run.sh

界面如下所示:
Qt5-brower.jpg

注:Qt WebEngine在FriendlyCore平台上需要使用Xcb插件来运行。

  • Qt 双屏异显示例

这是一个比较简单的DEMO,演示了在同时连接HDMI和eDP LCD屏的情况下,用Qt实现两个屏幕显示不同的内容, 用以下命令启动:

cd /opt/qt5-multi-screen-demo
./run.sh

双屏异显的效果如下所示:
Qt5-multi-screen.jpg

  • Qt Multimedia: 硬解播放器qt5-player

qt5-player播放器已经适配Rockchip的gstreamer插件,支持4K视频的硬解播放,由于Rockchip提供的插件只支持输出图像到X11窗口,因此 Qt 播放器程序需要使用 XCB 的显示插件来运行。
在命令行执行以下命令启动该示例:

cd /opt/qt5-player
./run.sh

播放器的界面如下所示,可以设置全屏播放,也可以调节音量:
Qt5-player.gif

  • Qt WebGL示例: nmapper

Qt WebGL允许你在其他设备的网页游览器查看并远程操作运行在开发板上的Qt程序,这个特性使得实现远程控制变得简单。
在运行示例之前,你的开发板需要先连接网络,然后在开发版本执行以下命令:

cd /opt/qt5-nmapper
./run-with-webgl.sh

然后在电脑或者手机上打开网页游览器,在浏览器的地址栏输入开发板的IP地址,应该就能看到Qt界面了,效果如下所示:
Qtwebgl.gif

  • Qt VNC示例: 智能家居控制界面

Qt VNC允许你将一个应用程序以VNC Server的形式运行,在其他设备上可以使用VNC Client来连接和控制,用QtWidgets或者QML编写的应用都是支持的。
执行以下命令启动:

cd /opt/qt5-smarthome
./run-with-vnc.sh

然后在电脑或者手机上安装并打开VNC viewer软件,输入开发板的IP地址加端口号5900,例如开发板的地址是192.168.1.100,就输入192.168.1.100:5900,连接后应该就能看到界面了,如下图所示:
Qt5smarthomevnc.png