Skip to content
Frank Bauernöppel edited this page Dec 1, 2018 · 38 revisions

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/.

Image with Qt5

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.

Qt examples

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.

Build your own image containing the Qt framework

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.

Build a demo app on RasPi

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.

Build a SDK for the build host

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.

further reading

Clone this wiki locally