[Interest] Guide me through the Qt offerings for GUIs
Rui Oliveira
ruilvo at hotmail.com
Thu Apr 22 21:05:57 CEST 2021
I agree absolutely with these observations, in principle.
But this seems to be "easy" when we're talking about an application
displaying data, with a fixed set of controls. Flashback to all the QML
tutorials using model/view + delegates.
In my particular case (and it's not unique to me at all), I have a
series of devices that I'd like to support, which have completely
different and unrelated controls. This might be my "stuck mindset"
talking, but I've seen this problem solved as I explained: "bring your
own controller", and yes, a widgets object and a "logic" object with
pointers to each other. I've "stolen" this idea from projects I've
seen. Add wish to have a plugin system, forcing an even more dynamic
system, and I don't know how to solve the problem without this
architecture.
And this is the only way I can think of doing it. I would really like to
know other way, so if anybody has pointers, I'd be glad to hear them.
And if I need to chain parameters on my hardware, how do I do it without
calling a method on the hardware object from a signal connected to a
slider? Again, keeping it isolated from the rest of the system, because
I don't know, not even at compile time, the controls needed. It's not
like I can just do it with a "Flux" architecture.
Maybe I'm absolutely terrible at software design. I'm not a software
engineer.
Rui
Em 22/04/2021 17:17, Giuseppe D'Angelo via Interest escreveu:
> 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.
>
> HTH,
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210422/02890ce6/attachment-0001.html>
More information about the Interest
mailing list