Difference between revisions of "How to Build, Install and Setting Qt Application/zh"
(→Qt版本介绍) |
(updated by API) |
||
(29 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | [[How to Build | + | [[How to Build, Install and Setting Qt Application|English]] |
==Qt版本介绍== | ==Qt版本介绍== | ||
Line 8: | Line 8: | ||
| Qt版本 | | Qt版本 | ||
| 显示驱动 | | 显示驱动 | ||
− | | | + | | OpenGL |
− | | | + | | QtWebEngine |
− | | | + | | QtMultimedia硬解 |
| 触摸屏 | | 触摸屏 | ||
| 显示屏 | | 显示屏 | ||
| 对应开发板 | | 对应开发板 | ||
|- | |- | ||
− | | RK3399 | + | | RK3328/RK3399/RK3568/RK3588 |
| Qt 5.10.0 | | Qt 5.10.0 | ||
| eglfs_kms, eglfs, xcb, webgl, vnc | | eglfs_kms, eglfs, xcb, webgl, vnc | ||
Line 23: | Line 23: | ||
| <b>多点触摸</b> | | <b>多点触摸</b> | ||
| <b>双屏异显</b> | | <b>双屏异显</b> | ||
− | | NanoPC-T4 | + | | NanoPC-T4/NanoPC-T6/NanoPi-R6S/NanoPi-R6C/CM3588/NanoPi-R5S/NanoPi-R5C |
|- | |- | ||
| S5P4418 | | S5P4418 | ||
− | | Qt 5. | + | | Qt 5.10.0 |
− | | eglfs | + | | eglfs, xcb, vnc |
| <b>Yes</b> | | <b>Yes</b> | ||
| <b>Yes</b> | | <b>Yes</b> | ||
Line 36: | Line 36: | ||
|- | |- | ||
| S5P6818 | | S5P6818 | ||
− | | Qt 5. | + | | Qt 5.10.0 |
− | | eglfs | + | | eglfs, xcb, vnc |
| <b>Yes</b> | | <b>Yes</b> | ||
| <b>Yes</b> | | <b>Yes</b> | ||
Line 51: | Line 51: | ||
| No | | No | ||
| No | | No | ||
− | | <b> | + | | <b>单点触摸</b> |
| <b>单屏</b> | | <b>单屏</b> | ||
| NanoPi-Duo/NanoPi-M1-Plus/NanoPi-M1/NanoPi-NEO-Air/NanoPi-NEO-Core/NanoPi-NEO | | NanoPi-Duo/NanoPi-M1-Plus/NanoPi-M1/NanoPi-NEO-Air/NanoPi-NEO-Core/NanoPi-NEO | ||
Line 61: | Line 61: | ||
| No | | No | ||
| No | | No | ||
− | | <b> | + | | <b>单点触摸</b> |
| <b>单屏</b> | | <b>单屏</b> | ||
| NanoPi-K1-Plus/NanoPi-NEO-Core2/NanoPi-NEO-Plus2/NanoPi-NEO2 | | NanoPi-K1-Plus/NanoPi-NEO-Core2/NanoPi-NEO-Plus2/NanoPi-NEO2 | ||
Line 77: | Line 77: | ||
==安装Qt交叉编译环境== | ==安装Qt交叉编译环境== | ||
− | ( | + | (注意:RK3328/RK3399/RK3568/RK3588 FriendlyCore需要使用的PC操作系统为 Ubuntu 18.04 64位系统,其他平台需要使用Ubuntu 16.04 64位系统) <br /> |
− | + | [https://dl.friendlyelec.com/QtSDK-FriendlyELEC 点击此链接下载压缩包],PC端的操作系统要求如下表所示: | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | | | + | | CPU名称与OS |
| Qt版本 | | Qt版本 | ||
− | | | + | | PC操作系统需求 |
|- | |- | ||
− | | | + | | RK3328/RK3399/RK3568/RK3588 FriendlyCore |
− | | Qt 5. | + | | Qt 5.10.0 |
− | | | + | | <b>Ubuntu 18.04 64位系统</b> |
|- | |- | ||
− | | | + | | RK3399 Lubuntu |
− | | Qt 5. | + | | Qt 5.10.0 |
− | | | + | | Ubuntu 16.04 64位系统 |
|- | |- | ||
− | | Allwinner H3 | + | | S5P4418 FriendlyCore |
+ | | Qt 5.10.0 | ||
+ | | Ubuntu 16.04 64位系统 | ||
+ | |- | ||
+ | | S5P6818 FriendlyCore 32bit | ||
+ | | Qt 5.10.0 | ||
+ | | Ubuntu 16.04 64位系统 | ||
+ | |- | ||
+ | | S5P6818 FriendlyCore 64bit | ||
+ | | Qt 5.10.0 | ||
+ | | Ubuntu 16.04 64位系统 | ||
+ | |- | ||
+ | | Allwinner H3 FriendlyCore | ||
| Qt 4.8.6 | | Qt 4.8.6 | ||
− | | | + | | Ubuntu 16.04 64位系统 |
|- | |- | ||
− | | Allwinner H5 | + | | Allwinner H5 FriendlyCore |
| Qt 4.8.6 | | Qt 4.8.6 | ||
− | | | + | | Ubuntu 16.04 64位系统 |
|- | |- | ||
− | | Amlogic S905 | + | | Amlogic S905 FriendlyCore |
| Qt 5.9.1 | | Qt 5.9.1 | ||
− | | | + | | Ubuntu 16.04 64位系统 |
|} | |} | ||
− | + | 在电脑上执行以下命令安装: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
+ | tar xzf qtsdk-friendlyelec-20210403.tgz | ||
+ | cd CPUName | ||
chmod 755 ./install.sh | chmod 755 ./install.sh | ||
sudo ./install.sh | sudo ./install.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | ==本地搭建Qt交叉编译环境== |
下面以下载并编译一个 QtE-Demo 为例,分别说明在各个平台编译一个 Qt应用程序的步骤: | 下面以下载并编译一个 QtE-Demo 为例,分别说明在各个平台编译一个 Qt应用程序的步骤: | ||
+ | |||
+ | ===RK3328/RK3399/RK3568/RK3588 FriendlyCore平台的编译=== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone https://github.com/friendlyarm/QtE-Demo | ||
+ | mkdir build && cd build | ||
+ | /usr/local/Trolltech/Qt-5.10.0-rk64one-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro | ||
+ | make | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===RK3399 Lubuntu平台的编译=== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd /work/ | ||
+ | git clone https://github.com/friendlyarm/QtE-Demo | ||
+ | mkdir build && cd build | ||
+ | /usr/local/Trolltech/Qt-5.10.0-rk32xcb-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro | ||
+ | make | ||
+ | </syntaxhighlight> | ||
===S5P4418平台的编译=== | ===S5P4418平台的编译=== | ||
Line 120: | Line 151: | ||
git clone https://github.com/friendlyarm/QtE-Demo | git clone https://github.com/friendlyarm/QtE-Demo | ||
mkdir build && cd build | mkdir build && cd build | ||
− | /usr/local/Trolltech/Qt-5. | + | /usr/local/Trolltech/Qt-5.10.0-nexell32-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro |
make | make | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 127: | Line 158: | ||
git clone https://github.com/friendlyarm/QtE-Demo | git clone https://github.com/friendlyarm/QtE-Demo | ||
mkdir build && cd build | mkdir build && cd build | ||
− | //usr/local/Trolltech/Qt-5. | + | //usr/local/Trolltech/Qt-5.10.0-nexell64-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro |
make | make | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 154: | Line 185: | ||
make | make | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ==使用Docker来构建交叉编译环境== | ||
+ | Cross-compiling Qt application in Docker: <br /> | ||
+ | * RK3328/RK3399/RK3568/RK3588 FriendlyCore | ||
+ | [http://github.com/friendlyarm/friendlyelec-ubuntu18-docker] | ||
+ | * RK3399 Lubuntu, S5P4418/S5P6818/H3/H5 FriendlyCore | ||
+ | [http://github.com/friendlyarm/friendlyelec-ubuntu16-docker] | ||
==在开发板上运行Qt程序== | ==在开发板上运行Qt程序== | ||
− | + | 运行Qt程序之前,需要先设置环境变量。<br> | |
− | + | <br> | |
− | + | Qt5,RK3399/RK3568/RK3588平台提供了4个脚本文件用于设置Qt环境变量,分别为: | |
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |脚本文件名||作用 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-kms||设置kms插件所需要的环境变量 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-eglfs||设置eglfs插件所需要的环境变量 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-xcb||设置xcb插件所需要的环境变量 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-nogui||仅供无界面的Qt程序使用 | ||
+ | |} | ||
+ | S5P4418与S5P6818平台则提供了3个脚本用于设置Qt环境变量,分别为: | ||
+ | ::{| class="wikitable" | ||
+ | |- | ||
+ | |脚本文件名||作用 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-eglfs||设置eglfs插件所需要的环境变量 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-xcb||设置xcb插件所需要的环境变量 | ||
+ | |- | ||
+ | |/usr/bin/setqt5env-nogui||仅供无界面的Qt程序使用 | ||
+ | |} | ||
+ | 例如要设置用KMS插件来显示程序界面,可以使用以下命令: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | . /usr/bin/setqt5env | + | . /usr/bin/setqt5env-kms |
</syntaxhighlight> | </syntaxhighlight> | ||
+ | (注: .与字母s之间有个空格) | ||
Qt4,使用 setqt4env: | Qt4,使用 setqt4env: | ||
Line 175: | Line 238: | ||
==在开发板上编译Qt应用程序 == | ==在开发板上编译Qt应用程序 == | ||
− | + | ===编译qmake项目 (以QtE-Demo为例)=== | |
− | === | + | 下面以下载并编译一个 QtE-Demo 为例,此方式目前仅支持RK3399、S5P4418和S5P6818平台: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
git clone https://github.com/friendlyarm/QtE-Demo | git clone https://github.com/friendlyarm/QtE-Demo | ||
mkdir build && cd build | mkdir build && cd build | ||
− | + | qmake-qt5 ../QtE-Demo/QtE-Demo.pro | |
make | make | ||
. setqt5env | . setqt5env | ||
./QtE-Demo | ./QtE-Demo | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ===编译cmake项目 (以github上的扫雷游戏为例)=== | |
− | === | + | 此方式目前仅支持RK3399、S5P4418和S5P6818平台: |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | |||
− | |||
− | |||
− | |||
. setqt5env | . setqt5env | ||
− | ./ | + | git clone https://github.com/phoemur/minesweeper |
+ | cd minesweeper | ||
+ | mkdir -p build | ||
+ | cd build | ||
+ | cmake -DCMAKE_PREFIX_PATH=$QTDIR .. | ||
+ | make -j4 | ||
+ | export DISPLAY=:0.0 | ||
+ | ./minesweeper | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 扫雷程序的界面如下图所示:<br /> | |
+ | [[File:friendlydesktop-minesweeper-qt5.png|frameless|500px]]<br /> | ||
==开机自动运行Qt程序== | ==开机自动运行Qt程序== | ||
Line 204: | Line 271: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
如果是 Qt4,请将setqt5env改为setqt4env。 | 如果是 Qt4,请将setqt5env改为setqt4env。 | ||
+ | |||
+ | |||
+ | ==安装Qt5.10官方示例== | ||
+ | Qt5.10示例压缩包可以在网盘以下路径获得: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sources/qt5.10-XXXXXX-examples | ||
+ | </syntaxhighlight> | ||
+ | 压缩包解压到根目录即可(下面的命令以RK3399 FriendlyDesktop系统为例): | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo tar xvzf Qt-5.10.0-rk64one-examples.tgz -C /<br /> | ||
+ | </syntaxhighlight> | ||
+ | 用以下命令运行示例,比如运行opengl的示例(下面的命令以RK3399 FriendlyDesktop系统为例): | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | export DISPLAY=:0.0 | ||
+ | /usr/local/Trolltech/Qt-5.10.0-rk64one/examples/opengl/hellowindow/hellowindow | ||
+ | </syntaxhighlight> | ||
==屏幕旋转== | ==屏幕旋转== | ||
− | + | ===Qt屏幕旋转=== | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | | | + | | CPU名称与OS |
| Qt版本 | | Qt版本 | ||
| 屏幕旋转方法 | | 屏幕旋转方法 | ||
|- | |- | ||
− | | S5P4418 | + | | RK3328/RK3399/RK3568/RK3588 FriendlyCore |
− | | Qt 5. | + | | Qt 5.10.0 |
+ | | '''kms方式运行时:'''<br /> | ||
+ | . setqt5env-kms<br /> | ||
+ | export QT_QPA_EGLFS_ROTATION=90<br /> | ||
+ | export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:rotate=90<br /> | ||
+ | ./YourApp<br /> | ||
+ | <br /> | ||
+ | 可设置角度值为: 0, 90, 180, or 270<br /> | ||
+ | <br /> | ||
+ | '''xcb方式运行时:'''<br /> | ||
+ | xrotate.sh -m CW<br /> | ||
+ | mv xorg.conf.new /etc/X11/xorg.conf<br /> | ||
+ | . setqt5env-xcb<br /> | ||
+ | startx ./YourApp -geometry 1280x800<br /> | ||
+ | <br />备注: 上面的1280x800请更改为实际的屏幕分辨率,xrotate.sh的帮助信息请用xrotate.sh -h命令查看。<br /> | ||
+ | |- | ||
+ | | S5P4418 FriendlyCore | ||
+ | | Qt 5.10.0 | ||
| export ROTATION=-90<br />. setqt5env<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, -90 | | export ROTATION=-90<br />. setqt5env<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, -90 | ||
|- | |- | ||
− | | S5P6818 | + | | S5P6818 FriendlyCore |
− | | Qt 5. | + | | Qt 5.10.0 |
| export ROTATION=-90<br />. setqt5env<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, -90 | | export ROTATION=-90<br />. setqt5env<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, -90 | ||
|- | |- | ||
− | | Allwinner H3 | + | | Allwinner H3 FriendlyCore |
| Qt 4.8.6 | | Qt 4.8.6 | ||
| . setqt4env<br />export QWS_DISPLAY='Transformed:Rot90'<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | | . setqt4env<br />export QWS_DISPLAY='Transformed:Rot90'<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | ||
|- | |- | ||
− | | Allwinner H5 | + | | Allwinner H5 FriendlyCore |
| Qt 4.8.6 | | Qt 4.8.6 | ||
| . setqt4env<br />export QWS_DISPLAY='Transformed:Rot90'<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | | . setqt4env<br />export QWS_DISPLAY='Transformed:Rot90'<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | ||
|- | |- | ||
− | | Amlogic S905 | + | | Amlogic S905 FriendlyCore |
| Qt 5.9.1 | | Qt 5.9.1 | ||
| . setqt5env<br />export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation=90<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | | . setqt5env<br />export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation=90<br />./YourApp<br /><br />可设置角度值为: 0, 90, 180, 270 | ||
|} | |} | ||
+ | ===X11屏幕旋转 (仅适用于RK3399)=== | ||
+ | 当你的Qt程序运行在X11系统时,例如在RK3399平台,使用 xcb 的插件运行 Qt 程序,或者在 Lubuntu 下运行 Qt 程序,可以使用X11的屏幕旋转功能。 | ||
+ | 目前暂时只支持 eDP屏 的显示旋转:<br> | ||
+ | 如果要旋转eDP屏的显示,可使用命令xrotate.sh 来旋转90/180/270度。<br><br> | ||
+ | 以root用户运行以下命令即可顺时钟旋转90度,会重启lightdm服务让设置立即生效:<br> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo xrotate.sh -m CW -r | ||
+ | </syntaxhighlight> | ||
+ | 运行 xrotate -h 可获得该命令详细的参数说明。<br/> | ||
+ | 另外,该命令暂不支持HDMI显示的旋转,用户可自己编辑/etc/X11/xorg.conf。<br/> | ||
==常见问题== | ==常见问题== | ||
Line 239: | Line 349: | ||
解决办法:检查一下qmake所生成的Makefile,正常情况Qt5的包含路径指向的是 sysroot 的地址即 rootfs-s5p4418或rootfs-s5p6818,你需要/opt目录下是否存在这个目录,不存在的话就重新安装一下sdk。 | 解决办法:检查一下qmake所生成的Makefile,正常情况Qt5的包含路径指向的是 sysroot 的地址即 rootfs-s5p4418或rootfs-s5p6818,你需要/opt目录下是否存在这个目录,不存在的话就重新安装一下sdk。 | ||
+ | ===FriendlyDesktop下单独运行Qt程序无法取消全屏? === | ||
+ | 在程序后面加上--platform xcb参数即可,如下所示: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | ./HelloQt --platform xcb | ||
+ | </syntaxhighlight> | ||
+ | 如下代码演示如果居中显示窗口: | ||
+ | <syntaxhighlight lang="c"> | ||
+ | #include "widget.h" | ||
+ | #include <QApplication> | ||
+ | #include <QDesktopWidget> | ||
+ | |||
+ | int main(int argc, char *argv[]) | ||
+ | { | ||
+ | QApplication a(argc, argv); | ||
+ | Widget w; | ||
+ | w.adjustSize(); | ||
+ | w.move(QApplication::desktop()->screen()->rect().center() - w.rect().center()); | ||
+ | w.show(); | ||
+ | |||
+ | return a.exec(); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
===如何隐藏控制台光标?=== | ===如何隐藏控制台光标?=== | ||
Line 257: | Line 389: | ||
export QT_QPA_EGLFS_HIDECURSOR=0 | export QT_QPA_EGLFS_HIDECURSOR=0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 即可显示光标,如果光标仍然无法显示,可尝试关闭硬件光标,方法是创建一个配置文件例如 kms-config.json,内容如下: | |
+ | <syntaxhighlight lang="bash"> | ||
+ | { | ||
+ | "device": "/dev/dri/card0", | ||
+ | "hwcursor": false | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | 然后使用环境变量指定该配置文件: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | export QT_QPA_EGLFS_KMS_CONFIG=$PWD/kms-config.json | ||
+ | </syntaxhighlight> | ||
+ | 示例: | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #!/bin/bash | ||
+ | . /usr/bin/setqt5env-kms | ||
+ | export QT_QPA_EGLFS_HIDECURSOR=0 | ||
+ | cd /opt/Qt5_CinematicExperience | ||
+ | export QT_QPA_EGLFS_KMS_CONFIG=$PWD/kms-config.json | ||
+ | [ $(id -u) -eq 0 ] && echo 0 > /sys/class/graphics/fbcon/cursor_blink | ||
+ | ./Qt5_CinematicExperience -qws | ||
+ | [ $(id -u) -eq 0 ] && echo 1 > /sys/class/graphics/fbcon/cursor_blink | ||
+ | </syntaxhighlight> | ||
===如何延长开机logo的显示时间?(解决启动黑屏问题)=== | ===如何延长开机logo的显示时间?(解决启动黑屏问题)=== |
Latest revision as of 08:02, 18 January 2024
Contents
1 Qt版本介绍
Qt针对不同型号的开发板,提供了不同的Qt版本,Qt支持的特性也不同,请参照下面的表格:
CPU名称 | Qt版本 | 显示驱动 | OpenGL | QtWebEngine | QtMultimedia硬解 | 触摸屏 | 显示屏 | 对应开发板 |
RK3328/RK3399/RK3568/RK3588 | Qt 5.10.0 | eglfs_kms, eglfs, xcb, webgl, vnc | Yes | Yes | Yes | 多点触摸 | 双屏异显 | NanoPC-T4/NanoPC-T6/NanoPi-R6S/NanoPi-R6C/CM3588/NanoPi-R5S/NanoPi-R5C |
S5P4418 | Qt 5.10.0 | eglfs, xcb, vnc | Yes | Yes | No | 多点触摸 | 单屏 | NanoPi S2/NanoPi M2A/NanoPi Fire2/NanoPC T2/Smart4418 |
S5P6818 | Qt 5.10.0 | eglfs, xcb, vnc | Yes | Yes | No | 多点触摸 | 单屏 | NanoPi M3/NanoPi Fire3/NanoPC T3 |
Allwinner H3 | Qt 4.8.6 | LinuxFB | No | No | No | 单点触摸 | 单屏 | NanoPi-Duo/NanoPi-M1-Plus/NanoPi-M1/NanoPi-NEO-Air/NanoPi-NEO-Core/NanoPi-NEO |
Allwinner H5 | Qt 4.8.6 | LinuxFB | No | No | No | 单点触摸 | 单屏 | NanoPi-K1-Plus/NanoPi-NEO-Core2/NanoPi-NEO-Plus2/NanoPi-NEO2 |
Amlogic S905 | Qt 5.9.1 | LinuxFB | No | No | No | 多点触摸 | 单屏 | NanoPi-K2 |
2 安装Qt交叉编译环境
(注意:RK3328/RK3399/RK3568/RK3588 FriendlyCore需要使用的PC操作系统为 Ubuntu 18.04 64位系统,其他平台需要使用Ubuntu 16.04 64位系统)
点击此链接下载压缩包,PC端的操作系统要求如下表所示:
CPU名称与OS | Qt版本 | PC操作系统需求 |
RK3328/RK3399/RK3568/RK3588 FriendlyCore | Qt 5.10.0 | Ubuntu 18.04 64位系统 |
RK3399 Lubuntu | Qt 5.10.0 | Ubuntu 16.04 64位系统 |
S5P4418 FriendlyCore | Qt 5.10.0 | Ubuntu 16.04 64位系统 |
S5P6818 FriendlyCore 32bit | Qt 5.10.0 | Ubuntu 16.04 64位系统 |
S5P6818 FriendlyCore 64bit | Qt 5.10.0 | Ubuntu 16.04 64位系统 |
Allwinner H3 FriendlyCore | Qt 4.8.6 | Ubuntu 16.04 64位系统 |
Allwinner H5 FriendlyCore | Qt 4.8.6 | Ubuntu 16.04 64位系统 |
Amlogic S905 FriendlyCore | Qt 5.9.1 | Ubuntu 16.04 64位系统 |
在电脑上执行以下命令安装:
tar xzf qtsdk-friendlyelec-20210403.tgz cd CPUName chmod 755 ./install.sh sudo ./install.sh
3 本地搭建Qt交叉编译环境
下面以下载并编译一个 QtE-Demo 为例,分别说明在各个平台编译一个 Qt应用程序的步骤:
3.1 RK3328/RK3399/RK3568/RK3588 FriendlyCore平台的编译
git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/Qt-5.10.0-rk64one-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro make
3.2 RK3399 Lubuntu平台的编译
cd /work/ git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/Qt-5.10.0-rk32xcb-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro make
3.3 S5P4418平台的编译
git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/Qt-5.10.0-nexell32-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro make
3.4 S5P6818平台的编译
git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build //usr/local/Trolltech/Qt-5.10.0-nexell64-sdk/bin/qmake ../QtE-Demo/QtE-Demo.pro make
3.5 Allwinner H3平台的编译
export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin/:$PATH git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake ../QtE-Demo/QtE-Demo-Qt4.pro make
3.6 Allwinner H5平台的编译
cd export PATH=/opt/FriendlyARM/toolchain/4.9.3/bin/:$PATH git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake ../QtE-Demo/QtE-Demo-Qt4.pro make
3.7 Amlogic S905平台的编译
export PATH=/opt/FriendlyARM/toolchain/6.4-aarch64/bin/:$PATH git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build /usr/local/Trolltech/QtEmbedded-5.9.1-arch64/bin/qmake ../QtE-Demo/QtE-Demo.pro make
4 使用Docker来构建交叉编译环境
Cross-compiling Qt application in Docker:
- RK3328/RK3399/RK3568/RK3588 FriendlyCore
- RK3399 Lubuntu, S5P4418/S5P6818/H3/H5 FriendlyCore
5 在开发板上运行Qt程序
运行Qt程序之前,需要先设置环境变量。
Qt5,RK3399/RK3568/RK3588平台提供了4个脚本文件用于设置Qt环境变量,分别为:
脚本文件名 作用 /usr/bin/setqt5env-kms 设置kms插件所需要的环境变量 /usr/bin/setqt5env-eglfs 设置eglfs插件所需要的环境变量 /usr/bin/setqt5env-xcb 设置xcb插件所需要的环境变量 /usr/bin/setqt5env-nogui 仅供无界面的Qt程序使用
S5P4418与S5P6818平台则提供了3个脚本用于设置Qt环境变量,分别为:
脚本文件名 作用 /usr/bin/setqt5env-eglfs 设置eglfs插件所需要的环境变量 /usr/bin/setqt5env-xcb 设置xcb插件所需要的环境变量 /usr/bin/setqt5env-nogui 仅供无界面的Qt程序使用
例如要设置用KMS插件来显示程序界面,可以使用以下命令:
. /usr/bin/setqt5env-kms
(注: .与字母s之间有个空格)
Qt4,使用 setqt4env:
. /usr/bin/setqt4env
例如运行上一章节编译的QtE-Demo:
./QtE-Demo -qws
6 在开发板上编译Qt应用程序
6.1 编译qmake项目 (以QtE-Demo为例)
下面以下载并编译一个 QtE-Demo 为例,此方式目前仅支持RK3399、S5P4418和S5P6818平台:
git clone https://github.com/friendlyarm/QtE-Demo mkdir build && cd build qmake-qt5 ../QtE-Demo/QtE-Demo.pro make . setqt5env ./QtE-Demo
6.2 编译cmake项目 (以github上的扫雷游戏为例)
此方式目前仅支持RK3399、S5P4418和S5P6818平台:
. setqt5env git clone https://github.com/phoemur/minesweeper cd minesweeper mkdir -p build cd build cmake -DCMAKE_PREFIX_PATH=$QTDIR .. make -j4 export DISPLAY=:0.0 ./minesweeper
7 开机自动运行Qt程序
以运行上一章节中的 QtE-Demo 程序为例,假设它放在 /root 目录,则你可以编辑 /etc/rc.local 文件,确否有以下内容:
. /usr/bin/setqt5env /root/QtE-Demo -qws&
如果是 Qt4,请将setqt5env改为setqt4env。
8 安装Qt5.10官方示例
Qt5.10示例压缩包可以在网盘以下路径获得:
sources/qt5.10-XXXXXX-examples
压缩包解压到根目录即可(下面的命令以RK3399 FriendlyDesktop系统为例):
sudo tar xvzf Qt-5.10.0-rk64one-examples.tgz -C /<br />
用以下命令运行示例,比如运行opengl的示例(下面的命令以RK3399 FriendlyDesktop系统为例):
export DISPLAY=:0.0 /usr/local/Trolltech/Qt-5.10.0-rk64one/examples/opengl/hellowindow/hellowindow
9 屏幕旋转
9.1 Qt屏幕旋转
CPU名称与OS | Qt版本 | 屏幕旋转方法 |
RK3328/RK3399/RK3568/RK3588 FriendlyCore | Qt 5.10.0 | kms方式运行时: . setqt5env-kms |
S5P4418 FriendlyCore | Qt 5.10.0 | export ROTATION=-90 . setqt5env ./YourApp 可设置角度值为: 0, 90, 180, -90 |
S5P6818 FriendlyCore | Qt 5.10.0 | export ROTATION=-90 . setqt5env ./YourApp 可设置角度值为: 0, 90, 180, -90 |
Allwinner H3 FriendlyCore | Qt 4.8.6 | . setqt4env export QWS_DISPLAY='Transformed:Rot90' ./YourApp 可设置角度值为: 0, 90, 180, 270 |
Allwinner H5 FriendlyCore | Qt 4.8.6 | . setqt4env export QWS_DISPLAY='Transformed:Rot90' ./YourApp 可设置角度值为: 0, 90, 180, 270 |
Amlogic S905 FriendlyCore | Qt 5.9.1 | . setqt5env export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:rotation=90 ./YourApp 可设置角度值为: 0, 90, 180, 270 |
9.2 X11屏幕旋转 (仅适用于RK3399)
当你的Qt程序运行在X11系统时,例如在RK3399平台,使用 xcb 的插件运行 Qt 程序,或者在 Lubuntu 下运行 Qt 程序,可以使用X11的屏幕旋转功能。
目前暂时只支持 eDP屏 的显示旋转:
如果要旋转eDP屏的显示,可使用命令xrotate.sh 来旋转90/180/270度。
以root用户运行以下命令即可顺时钟旋转90度,会重启lightdm服务让设置立即生效:
sudo xrotate.sh -m CW -r
运行 xrotate -h 可获得该命令详细的参数说明。
另外,该命令暂不支持HDMI显示的旋转,用户可自己编辑/etc/X11/xorg.conf。
10 常见问题
10.1 编译程序出现错误 ../QtE-Demo/main.cpp:18:21: fatal error: QtWidgets: No such file or directory
解决办法:检查一下qmake所生成的Makefile,正常情况Qt5的包含路径指向的是 sysroot 的地址即 rootfs-s5p4418或rootfs-s5p6818,你需要/opt目录下是否存在这个目录,不存在的话就重新安装一下sdk。
10.2 FriendlyDesktop下单独运行Qt程序无法取消全屏?
在程序后面加上--platform xcb参数即可,如下所示:
./HelloQt --platform xcb
如下代码演示如果居中显示窗口:
#include "widget.h" #include <QApplication> #include <QDesktopWidget> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.adjustSize(); w.move(QApplication::desktop()->screen()->rect().center() - w.rect().center()); w.show(); return a.exec(); }
10.3 如何隐藏控制台光标?
关闭光标
sudo echo 0 > /sys/class/graphics/fbcon/cursor_blink
恢复光标
sudo echo 1 > /sys/class/graphics/fbcon/cursor_blink
10.4 如何隐藏和显示鼠标光标?
使用Qt5 EGLFS运行程序时,通过QT_QPA_EGLFS_HIDECURSOR环境变量来控制鼠标光标的显示与隐藏, 设置为1时会隐藏光标,设置为0时会显示光标。
例如,在执行 setqt5env 脚本之后执行:
export QT_QPA_EGLFS_HIDECURSOR=0
即可显示光标,如果光标仍然无法显示,可尝试关闭硬件光标,方法是创建一个配置文件例如 kms-config.json,内容如下:
{ "device": "/dev/dri/card0", "hwcursor": false }
然后使用环境变量指定该配置文件:
export QT_QPA_EGLFS_KMS_CONFIG=$PWD/kms-config.json
示例:
#!/bin/bash . /usr/bin/setqt5env-kms export QT_QPA_EGLFS_HIDECURSOR=0 cd /opt/Qt5_CinematicExperience export QT_QPA_EGLFS_KMS_CONFIG=$PWD/kms-config.json [ $(id -u) -eq 0 ] && echo 0 > /sys/class/graphics/fbcon/cursor_blink ./Qt5_CinematicExperience -qws [ $(id -u) -eq 0 ] && echo 1 > /sys/class/graphics/fbcon/cursor_blink
10.5 如何延长开机logo的显示时间?(解决启动黑屏问题)
由于内核在启动时会将屏幕初始化为终端,从而导致开机logo图片在短暂显示后就被冲掉变成黑屏,这在量产时是不愿意看到的,
可通过重新配置并编译内核来解决这个问题。
10.5.1 For 4.x 内核
参考如下配置,重新配置并编译内核:
Device Drivers ---> Graphics support ---> Console display dirver support ---> < > Framebuffer Console support
禁用Framebuffer Console support 即可保持Logo的显示,直至Qt应用的运行。
10.5.2 For 3.x 内核
参考如下配置,重新配置并编译内核:
Device Drivers ---> Graphics support ---> [*] Bootup logo ---> [ ] Standard black and white Linux logo [ ] Standard 16-color Linux logo [ ] Standard 224-color Linux logo [*] Copy logo from previous FB Console display driver support ---> [ ] Framebuffer Console support
进入 Device Drivers的Graphics support菜单,勾选Bootup logo,并且只选中 Bootup logo里面的 Copy logo from previous FB。
再回到Graphics support菜单,进入Console display driver support 菜单,取消 Framebuffer Console support 项的选中。