[Interest] Guide me through the Qt offerings for GUIs

Giuseppe D'Angelo giuseppe.dangelo at kdab.com
Thu Apr 22 18:17:36 CEST 2021

On 22/04/2021 17:06, Rui Oliveira wrote:
> Q_INVOKABLE, Q_PROPERTY, etc... The Qt stuff crawls into what would 
> otherwise be just business logic because you need to access something.
> I've linked this before: 
> https://stackoverflow.com/questions/66618613/qml-c-classes-with-bring-your-own-component
> Which again, is absolutely trivial do to with C++ and polymorphism. And 
> a pointer/reference instead of adding macros in 20 placesĀ  and the 
> Q_PROPERTY lines...
> Basically we're coupling the whole backend to the GUI framework.

Wait, this sounds precisely what you shouldn't do.

You should create a C++ layer (call it a "presentation" layer) that sits 
between your (possibly non-Qt) business logic and the UI. That layer 
contains stuff like item models, QObjects that expose the relevant 
business logic APIs, type wrappers, and so on.

(Possibly even more layers. Like an cake. Or an ogre)

This way

* the business logic is agnostic of the UI framework used above (could 
be Widgets, could be Qt Quick, could be HTML)

* you can do UI testing by swapping out the business logic with a 
testing one

* you can test the business logic without the UI

and so on.

While building this layering may be super tedious (YMMV), in the long 
run, it makes your application more robust, not less. The fact that QML 
_forces_ you to have this stuff becomes somehow a good thing.

On widgets, well, raise your hand if you didn't at least once connect a 
QPushButton to a slot declared in the widget that contains the button, 
and perform some business logic from there (yay business logic in the UI!).

And/or thought "ok, I should add a controller for the UI layer that 
talks to these other 5 objects, and does this and that, and gets 
triggered by the button... or I could just #include 
"Component_Deep_Into_Business_Logic.h" and just call a method on it.". 
You know, "a little goto never hurt anyone". (Velociraptor ensues)

In other words, being "entirely" in C++ has also its downsides.

Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com
KDAB - The Qt, C++ and OpenGL Experts

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4329 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210422/fbddaa8c/attachment.bin>

More information about the Interest mailing list