A few years ago, I began to develop applications across multiple platforms written in C++. I wrote mostly on Windows, and discovering open-source projects led me to discover the Qt framework. I’ve spent more time than I would care to admit on understanding Qt, it’s IDE, and the runtime libraries which function together in many layers. Phew.
I feel it necessary to mention that a module in Qt is a nebulous term: it can mean files, headers, C++ classes and associated shared libraries. The files can be, QML files, or build system files.
I’m now moving away from the Qt framework, but still aiming to make software run across multiple platforms. I still write C++ code, and exploit the ubiquity of OpenGL.
Because OpenGL is fairly portable, I’ve decided to take a hybrid approach by mixing C++ with another language, native to the target platform, such as Java on Android, to create user interface elements. And, it works, as I’ve used this approach for Tuning, achieving the desired traits of performance and size.
Tuning starts in milliseconds compared to a Qt application which takes a few as the system’s dynamic linker takes significant time loading the symbols from files into memory at runtime.
Qt Quick is very convenient, providing controls and common items for the QML language. Quick applications use the QQmlApplication class, which provides an engine and renderer. The problem is with classes exposed through the QML engine, from the Quick 3D module.
The Quick 3D module provides types in QML that allow you to mix 2D and 3D content in the same scene. On Android, Quick 3D classes don’t function as well on Android, especially with recent versions.
I’ve been able to run an application showing a 3D scene on GNU/Linux, but on Android, a black screen. Here’s a screenshot of my application running on Ubuntu:
The latter reason, along with other bugs and also the baggage that Qt carries in the form of shared libraries may have influenced my decision to embrace minimalism more. My next project, Car Customizer, will be moving on to using only necessary libraries and source code.
If less is more, than I hope I can achieve the same with less, and possibly more.