Big Disappointing



Today I received some disappointing news. The tool I had been using for about a year turned out to be unsuitable for me. I realized that Qt QML was not the best choice for making Android and IOS apps because of the huge limitations of the framework.

I have always loved doing things the hard way and understanding how things work, not just using them. That’s why I fell in love with C++ at first sight and spent years using the language in the console only. But when I wanted to use the GUI, I found that there were only two options: XWidget and Qt. After learning about Qt from http://zxstudio.org/, I was impressed by its flexibility, cross-platform support and more. So a year ago, on 04/03/2022, I started learning Qt with QML so I could make cross-platform apps using C++ in the backend and QML, JS as my front end. And I thought the learning curve wouldn’t be too hard because QML was just a UI language and no logic was needed. Well, it turns out that learning Qt is a nightmare because of all the limitations of the framework and the poor documentation. There are also very few tutorials on some topics and most of them are outdated or unclear.

Even so, I tried to learn it because when I learn new stuff, I use the 3-3-1 rule: 3 weeks, 3 months, 1 year. That’s a big review so I don’t feel bad for giving up on something without spending enough time to learn it properly. And after a year of trying and failing, this is what I found.

Ø  Qt QML does not have hot reload, and the only option is to install a third-party tool called Felgo, which is too slow and does not work with Android or IOS. The documentation is poor and the user experience is bad. There is no support or help available.

Ø  The QML framework with CMake and C++ is not clear. What I mean by that is that QML is based on JS, so it should display without the need of debugging every time you change something. And it does, if you are not importing any library or other component from another directory or the same directory. Because if you do, it will show you a message “The library NameOfYourComponent is not installed” and there is no way around it. And that means every single time you change anything in the UI, you need to rebuild and debug. And that’s very time-consuming.

Ø  No update push. And by that I mean that if you make an app, you will have to send it to IOS or Android for review every time you make an update. “IOS reviewers are a nightmare” and it will take you 1 to 2 weeks to get an update approved. And most of the time they will ask you to update something else, so to push an update it will take you about a month or two.

Ø  Components in QML are a real nightmare because you need to be very precise when you create them or you will have to rewrite the whole page where you use the component. And that’s because QML uses an anchor-based system to position things. This can be frustrating and limiting for developers who want more flexibility and creativity in designing their UI.

Ø  QDesigner ~<~ we son’t talke about it 😉

And the biggest issue for me was the licensing. Qt is a framework that relies on selling its technology to survive and grow. But the licensing options are not flexible at all. There are only two types open source that forces you to respect LGPL version 3, GPL version 2 and GPL version 3, and While the open source license was an option, I did not want to share my source code with the world.  In the other hand we have commercial licensing that costs $302 per month. And the problem with that as an individual programmer who is working on a project that hopes to get him to a better position, I don’t want to share my source code. But at the same time, I don’t have the money to pay $302 per month. And that was the biggest drawback I had. This makes Qt inaccessible and unattractive for many developers who want more freedom and affordability in their choice of framework.

In conclusion, if you are a C++ developer who wants to make games or apps and wants to use a cross-platform framework and either you have $301 per month and another $180 per month for QDesign, or you don’t mind sharing your source code and you are ready for all the headache you will get trying to deal with the limitations of Qt QML instead of focusing on your project, then Qt is a great framework for you. Or you can run away like I’m doing right now XD