Working with QML

This application is a replica of work I have done in Qt and C# before, but this time I use QML which is a very different technology. At first I must admit that it is overwealming and complex. One of the steepest learning curves I have experienced as it involves C++, Qt, QML, JavaScripts and the bindings between them. And Qt’s level of doc and examples have room for improvement to be gentle. As for Qt’s visual designers – well they simply don’t work at all – so all the work needs to be done in editors. That said I must admit that QtCreator have improved a lot in this version (Qt 5.15) and I have yet to try Qt 6.

This demo is not as fancy as my previous work yet simply because of the steep learning curve with QML involved, but it’s work in progress and I am very impressed with the graphical performance so far.

The tool I am working on here have been planned and attenpted a few times with different technology. I could have completede it in different technology earlier, but as I target SCADA/HMI solutions I am picky about graphics performance. QML is the most promissing so far, but it slower to work with than the alternatives (yet). That said I have no performance issues as the GPU’s does the heavy work and I have full graphical freedom. I also expect that this will be easier to work with as my experience level on QML grows.

Dealing with QML you have to deal with 4 layers of different languages and the integration between them.

  1. C++ versus Qt’s version of C++. Qt can use ordinary C or C++, but Qt libs have so many additions and tweaks that you end up converting data and signals. This is a pain if you like me write code to be used as firmware components as well.
  2. Bindings between C++ and QML. On this step I think Qt have done a good job, but it is manual work.
  3. Bindings between QML and JavaScript. Qt uses ECMAScript 262 version 5 and while WML is a declarative language, JavaScript is the language that you need to use for a bit of processing.

One of the advantages with QML is that it supposedly alwo runs on Web, Windows, Linux, Android etc – so far I have only tested Windows, but I wil be testing raspberry PI’s.

Well done Qt!

Leave a Reply