Graphic of two people in an epic battle scenario, symbolising the competition between QT and Flutter.

Battle of the giants: A comparison between Qt and Flutter

Estimated reading time: 9 minutes

HomeKnow-HowQT vs. Flutter
Authors: Marcus Voß & Hendrik Timmermann
Authors: Marcus Voß & Hendrik Timmermann

The development of user interfaces has undergone rapid progress in recent years. Two outstanding frameworks are at the heart of this revolution: QT and Flutter. In this article, we take a closer look at which of these two frameworks has the edge and whether Flutter is a viable alternative to QT in the embedded sector.

What are QT and flutter?

QT and Flutter are frameworks for the platform-independent development of modern user interfaces. QT was developed in the early 1990s by Norwegians Eirik Chambe-Eng and Haavard Nord for desktop applications. Flutter was only released in 2018 and has since built up a huge fan base, partly because it is well suited for developing cross-platform mobile apps. However, Flutter is rarely used in connection with embedded systems; QT is more common.

QT and flutter: a comparison

QT has been used in the development of embedded systems for a long time and has proven to be an extremely robust and reliable framework in this context. For this reason, it is often the first choice and has established itself as the ‘standard framework’ that people like to fall back on. QT offers a wide range of functions and predefined libraries, which facilitates the development of complex user interfaces (UIs).

Despite these strengths, there are a few factors to consider when deciding on QT, especially with regard to the licensing model. Although there is an open source version, its use in embedded applications often requires the purchase of a commercial licence. This can be a financial hurdle in certain projects. In addition, developing QT applications in C++ or QML is more complex than what is familiar from modern programming languages or the web today.

QTFlutter
Licensing
  • Dual Licensing (Commercial, LGPLv3, GPL2, GPL3)
  • No mixing of open-source licensed QT projects and commercially licensed QT projects
  • Open source license only possible on embedded Linux not on microcontrollers
  • Professional or Enterprise license depending on the application scenario
  • Flutter is licensed under the open BSD license
Supported platforms
  • Microcontroller (only with commercial license)
  • Windows, Linux, MacOS, Embedded Linux (32 and 64 bit, open source / commercial)
  • Android, iOS
  • Windows, MacOS, Linux (officially only 64bit)
  • Web
  • Embedded (wip/beta/experimental)
Cost per device
  • Costs per device
  • Cost per development license

 

Flutter seems to be an attractive alternative. It enables the development of responsive and aesthetically pleasing UIs and is particularly suitable for projects that require fast development cycles and flexibility. For example, Flutter's hot reload feature significantly speeds up the development process by making changes to the code visible in real time. In addition, Flutter is licensed under the BSD license, which means that it can also be used free of charge in commercial closed-source projects.

  • The use of Flutter is free of charge

Flutter is a framework developed by Google and, with over 2 million active users, is one of the most widely used cross-platform development frameworks in the world. Although it has traditionally been used less in the embedded sector, individual companies such as Toyota are showing that there is potential in this context too.

The car manufacturer successfully used Flutter's Embedder API to improve its Linux-based infotainment systems, benefiting from Flutter's efficient development environment and the ability to create cross-platform applications with a unified code base (read more here).
For this reason, we decided to compare the two frameworks in order to investigate the extent to which Flutter is currently suitable as an alternative to QT in the embedded sector.

We compare QT and Flutter on these platforms

For our comparison, we deliberately chose two different test platforms. One represents the best-case scenario and serves as a reference platform. The other is a realistic platform that more closely matches the requirements and performance of common hardware in practice. Both platforms have a capacitive touchscreen with 800×480 pixels.

The best-case reference is the newly released Raspberry Pi 5. We use the latest version of the Raspberry Pi OS, which is based on the 64-bit version of Debian bookworm, as the operating system. QT5 and Flutter must then be installed using apt-get.

An STM32MP157F-DK2 served as a more realistic platform. Unlike the Raspberry Pi, which uses a pre-built Linux image as its basis, we took a different approach for the STM32. Using Yocto, we created our own customised Linux image. Yocto is an open-source project for creating custom Linux distributions for embedded systems. In our case, this image contains all the necessary dependencies and packages for QT and Flutter.

FeatureRaspberyy Pi 5STM32MP15F-DK2
CPU64-bit Broadcom BCM271232-bit Dual-Core Cortex-A7 + Cortex M4
CPU cores4 cores2 cores
CPU clock frequency2.4 GHz 800 MHz800 MHz + 209 MHz (M4)
Working memory8 GB DDR4512 MB DDR3L
GPUVideoCore VIIVivante GCNano
Graphics supportOpenGL ES3.1, Vulkan 1.2OpenGL ES2.0
Operating systemRaspberry Pi OS (64-bit Debian bookworm)OpenSTLinux (Yocto)
Software installationUsing apt-getPre-installed in the Linux image
DisplayCapacitive touchscreen, 800×480 pixelsCapacitive touchscreen, 800×480 pixels

Performance: How our test application works

To compare the user-friendliness and performance of QT and Flutter, we wrote a test application in both frameworks. This simulates a simple app menu, comparable to a touchscreen interface familiar from modern coffee machines, for example.

Icons symbolise different test categories, such as multi-touch, gestures, animation and video. QT vs Flutter.

To compare the user-friendliness and performance of QT and Flutter, we wrote a test application in both frameworks. This simulates a simple app menu, comparable to a touchscreen interface familiar from modern coffee machines, for example.

Icon collection for evaluating multitouch, gestures, animation, maze and video player. QT vs Flutter.

We developed the Flutter version using Dart, a modern, object-oriented programming language designed by Google specifically for the framework. The hot reload feature allows developers to make code changes and see them immediately in the running application, speeding up the development process. This enables faster review and adjustment of changes without time-consuming restarts or waiting times. With QT, this is officially only possible with paid licences.

Developing with Dart is also straightforward. Thanks to the wide range of packages provided by official and community developers, many features are easy to integrate. However, the different licences for the packages must be taken into account. Although these are mainly open source, they may use more or less restrictive licence models. The currency of the community packages must also be taken into account. In the course of these tests, the Flutter app is generated and executed using flutter-pi, a Flutter engine embedder (Flutter pi Github).

The user experience put to the test

But it's not just performance that has to be right – the user experience is also important. Response speed and smooth operation of the UI play a particularly important role here. To assess this, we developed several small test applications that can be used to check frequently used functions:

  • Multitouch test: This app visualises every detected touch point to provide direct feedback on the delay between the actual touch and the detected touch event. For QT-based apps, we implemented touch point detection with both QML and C++, as we found that detection with QML had a greater delay compared to C++.
  • Gesture test: This application allows you to test common gestures, such as pinch-to-zoom or rotating an image with two fingers.
  • Maze test: This app is used to check the precision of touch detection. Users must draw a line with their finger to navigate through a maze.
  • Animation test: This app tests the performance of the frameworks in terms of animations by playing numerous animations simultaneously.
  • Video performance test: This application checks how effectively the framework can play videos.

How we compile the QT and Flutter apps

The easiest way to compile the test applications for the Raspberry Pi is to build them directly on the Pi. Interestingly, the process took only a few seconds for the QML application, while the Flutter app took more than 5 minutes to compile on the Raspberry Pi. This can be explained by the fact that dynamic linking is used for the QT app, while everything is always recompiled for the Flutter app.

Alternatively, you can also compile the applications ‘cross-platform’ from another computer. In practice, this is often preferred, especially for professional projects. This approach simplifies development for devices with limited resources by allowing the software to be created on more powerful systems. By simplifying dependency management and ensuring reproducible builds, development becomes more efficient and flexible.

Performance of QT and Flutter

As expected, both the QML and Flutter applications run without any problems on the Raspberry Pi. However, the Flutter app shows significantly higher CPU and memory usage. While the QT app only requires about 90 MB of RAM in the app menu, the Flutter app consumes more than 400 MB. It appears that the Flutter Linux desktop environment is significantly less efficient. This is not a problem on the Raspberry Pi with 8 GB of RAM. In practice, however, systems with significantly fewer resources are often used.

The table shows memory requirements in MB: QML requires 90 MB, Flutter 400 MB. QT vs Flutter.
Raspberry Pi: Physical memory requirements in the application start menu

Our analysis shows that the memory requirements for the QT and Flutter applications on the STM32 with 512 MB RAM are significantly lower than on the Raspberry Pi, at 72 MB and 75 MB RAM respectively. This is probably due to the leaner Linux system and the use of a Flutter embedder instead of the desktop Linux environment. Nevertheless, there is also an advantage for the QT application compared to Flutter. Although the differences are not as significant as on the Raspberry Pi, QT once again performs better in comparison.

The table shows memory requirements in MB: QML requires 72 MB, Flutter 75 MB. QT vs Flutter.
STM32: Physical memory requirements including shared libraries in the application start menu

QT vs. Flutter: QT still has the edge

Our findings show that Flutter can be a suitable alternative to QT under certain conditions. The advantages of Flutter lie in a more modern development process and the use of contemporary programming languages, which generally speeds up development. Another plus point is the attractive licence structure, as there are no fees to pay, unlike with QT.

However, our investigation also showed that Flutter does not yet achieve the same efficiency as QT on embedded platforms. This is because QT requires significantly less memory for the same application. Therefore, the conditions under which Flutter is a suitable alternative to QT remain specific: the framework is particularly suitable for projects where fast development and cross-platform compatibility are important.

In scenarios where systems have limited resources and efficient use is particularly critical, QT will most likely continue to lead the way and remain the first choice.

Advantages of Flutter:

  • Development process: Flutter is an open-source UI toolkit that enables developers to create cross-platform applications
  • Modern programming language: Flutter uses Dart, a modern, single-threaded language with a strong focus on reactive programming
  • Attractive licensing structure: In contrast to QT, there are basically no license fees, which can minimize development costs
  • Hot reload function: The ability to see changes in the code immediately speeds up the development process

Disadvantages of Flutter compared to QT:

  • Efficiency on embedded platforms: Compared to platform-specific solutions such as QT, Flutter is less efficient on embedded platforms
  • Lower package availability: There is currently a more limited number of available packages compared to the more established framework (QT)
  • Higher resource requirements: Requires more resources for the same applications as QT

Outlook: Alternatives to QT and Flutter

Pure web applications could be another promising alternative to QT, especially since they can run natively in browsers on embedded devices and therefore have virtually no requirements for the underlying operating system. Although this flexibility offers an attractive approach, there are legitimate concerns about the resource efficiency and long-term future viability of such solutions.

Another key aspect in the web sector is the rapid development and frequent emergence of new frameworks and methods. This contrasts sharply with the requirements in the embedded sector, where long-term support and the maturity of technologies are paramount. Nevertheless, it could be interesting to take a closer look at this in the future.

About Marcus Voß & Hendrik Timmermann
About Marcus Voß & Hendrik Timmermann

Marcus Voß joined MaibornWolff in October 2023 as a software engineer in the Smart Devices division. During his studies, he worked intensively with embedded Linux and microcontroller programming. At MaibornWolff, he works on internal research projects and develops innovative solutions for customer projects. His focus is on development in C, C++ and Python.

Hendrik joined MaibornWolff in November 2023 as a software engineer in the Smart Devices division. In his daily work, he designs and develops customer-specific solutions, drawing on a broad range of skills in the field of embedded systems, particularly in working with microcontrollers.

Find what suits you best
Refine your search
clear all filters