-
Notifications
You must be signed in to change notification settings - Fork 9
Qt5
Qt is a great framework for creating (not only) embedded applications with appealing GUIs. The apps are traditionally written in C++, but GUI design can be done in QML, a descriptive language. There is a rich library of platform independent C++ classes, somehow comparable to JAVA or .NET. Read more on the homepage https://www.qt.io/.
The rpi-avg-image
can be built with Qt5 support: LinuxFB (framebuffer) and EGLFS ( EGL) are configured as QPAs (Qt Platform Abstraction) and OpenGL ES 2.0 (OpenGL) is used for hardware accelerated drawing.
For bitbakeing Qt recipes, the currently used branch of the Qt5 layer git://github.com/meta-qt5/meta-qt5.git
must be cloned into the recipes
folder and added to bblayers.conf:
.../recipes$ git clone -b rocko git://github.com/meta-qt5/meta-qt5.git
The Qt5 related packages must be included in the rpi-image-avg.bb
recipe, like:
IMAGE_INSTALL_append += " \
packagegroup-qt5 \
"
packagegroup-qt5
contains a rather long list of modules, so you might want to select your favorites here, see the recipe in .../recipes/meta-raspberrypi-avg/recipes-core/packagegroups
or add even more.
rpi-avg-image
comes with several cimematicExperience examples:
- qt5-opengles2-test -platform eglfs
- Qt5_CinematicExperience -platform eglfs
- BasicQuick -platform eglfs
- pushd /usr/share/qtsmarthome-1.0/; ./smarthome -platform eglfs; popd
Instead of specifying the graphical backend as a parameter -platform eglfs
you may set an environment variable:
export QT_QPA_PLATFORM=eglfs
root@raspberrypi3:~# /usr/share/cinematicexperience-1.0/Qt5_CinematicExperience
On the HDMI monitor, you should see a smooth rendering with 60 fps and, with htop
, only a moderate CPU usage of some 20%. A USB mouse or a touchscreen are recommended for user input.
Make sure that qtbase is configured with eglfs
, gles2
and linuxfb
. See https://github.com/jumpnow/meta-rpi/blob/rocko/recipes-qt/qt5/qtbase_git.bbappend. A nearby recipe https://github.com/jumpnow/meta-rpi/blob/rocko/recipes-qt/qt5-env/files/qt5-env.sh shows hot to automate path and environment settings.
see the qqtest
example under Building Qt Apps on the RPi in https://jumpnowtek.com/rpi/Qt5-and-QML-Development-with-the-Raspberry-Pi.html
Build (cross-compile) a test app on the build host.
From a bitbake shell:
frank@FrankBuntuSSD:~/raspi/build$ bitbake qt5-opengles2-test
The output package resides in one of the ${BUILDDIR}/tmp/deploy/ipk/*
folders.
This time we don't use the package server, but a mere copy over the network (adjust IP address accordingly):
frank@FrankBuntuSSD:~/raspi/build$ scp ${BUILDDIR}/tmp/deploy/ipk/*/qt5-opengles2-test_1.0.4*.ipk [email protected]:/home/root
On the RasPi install the package:
root@raspberrypi3:~# opkg install qt5-opengles2-test_1.0.4+gitr0+9383905070-r0_cortexa7hf-neon-vfpv4.ipk
and start it:
root@raspberrypi3:~# qt5-opengles2-test
Watch the output on an attached HDMI monitor. Its a quite simple test app only, but it demonstrates that all APIs needed are functional. I might be useful to study its recipe under sources/meta-qt5/recipes-qt/examples/qt5-opengles2-test_git.bb
.
frank@FrankBuntuSSD:~/raspi/build$ bitbake meta-toolchain-qt5
The result is a huge shell archive file poky-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-vfpv4-toolchain-2.4.4.sh
in the build folder tmp/deploy/sdk
.
When this file is executed on a Linux build host, it installs a SDK for cross-compilation of Qt5 applications on the build host.
With the SDK, it is possible to use the Qt IDE qtcreator for software development. When properly configured, qtcreator can deploy your app to an attached Raspi via network (sftp) and even remotely debug it over the network.