[Interest] Guide me through the Qt offerings for GUIs
Rui Oliveira
ruilvo at hotmail.com
Thu Apr 22 22:28:46 CEST 2021
Olá João!
Doing logic with QML? hehe I can hear the voice of Jesper Pedersen from
KDAB saying "your business logic stays in C++"
(https://www.youtube.com/watch?v=JxyTkXLbcV4 pretty good series, actually).
I'm just kidding, Qt itself has examples in Qt Creator making a game
without any C++ logic
(https://doc.qt.io/qt-5.12/qtquick-tutorials-samegame-samegame1-example.html
and parts 2 and 3).
Thanks for your insights! I see that those who use QML love it, it seems
to be a consistent feeling.
I'll keep that in mind. Now I guess I need to learn software
architecture that covers both what I want to do and good practices with
GUI work.
Thanks,
Rui
Em 22/04/2021 20:33, joao morgado via Interest escreveu:
> Olá Rui
>
> Just to share my experience with Qt widgets and QML. I had a simple
> desktop calculator app with Widgets and OpenGL graphics.
> I had a c++ mindset and was ok doing that. When QML come around it was
> a bit strange and I had to leave my confort zone.
> Eventually QML syntax become so pleasent to me and I found myself
> really enjoyng developing with qml / javascript.
> I ported my app to QML based on the OpenGL under QMLexample. I started
> porting in the QML early days so I had to do a lot of "widgets" in qml
> from scratch wich was a bit of work. My app looks a lot better in QML
> and works for android and iOS with consistent look and feel in all
> plataforms.
> Also I find the qml development much faster than c++.
>
> I also developed a game in qml. It has almost no relevant UI, but I
> had a very pleasent experience using javascript and qml features for
> the game logic (hello qml bindins, hello qml timer sintax). I never
> had performance problems, as some people say that javascript is slower
> than c++, but at the end of the day I think it also has a lot to do
> with your code algorithm and the type of app your developing. Btw I
> never had developed with javascript before, but if you are a c++
> developer you will have no problems at all.
>
> If I had to start a new app today for desktop I would go for QML. Your
> app is for desktop today, but you never know when your users will
> start asking for a mobile or tablet version.
>
> Cheers
> João
>
>
> Em quinta-feira, 22 de abril de 2021 19:41:06 GMT+1, Konstantin
> Shegunov <kshegunov at gmail.com> escreveu:
>
>
> On Thu, Apr 22, 2021 at 7:19 PM Giuseppe D'Angelo via Interest
> <interest at qt-project.org <mailto:interest at qt-project.org>> wrote:
>
> 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.
>
>
> Registering a struct/data class with the meta type system and/or
> marshaling it over QVariant, just so it can be visible in QML isn't
> that. Or things as natural (with C++) as having the UI raise some
> encapsulated piece of data in a signal (say some struct, say QColor or
> QVector3D) which the backend responds to isn't it either. As a matter
> of fact, how do you tie your existing backend to QML? Say we have this
> nice encapsulated UI that's completely decoupled from the business
> logic, how do I tie a specific object from the Quick scene and connect
> the notifications back to C++? I can't do it from the business logic
> (i.e. controller side), I have to expose the backend to the QML engine
> and do it from there, am I wrong? Basically you say it's fine that the
> UI drives the controller (incl. object creation)?
>
> We can agree on the principles, gladly, but this is really a gross
> oversimplification of the problem.
>
> 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.
>
>
> Forces you? Do you mean, perhaps, that JS is somehow not supported, or
> maybe that Component.createObject is somehow hidden and/or inaccessible?
>
> 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!).
>
>
> Yes, it is done, and not without an honorable mention of the
> documentation, where the view-controller idiom is used extensively.
> But then, raise your hand if you at least once didn't use an `if` (or
> some other JS piece of code) in a QML file. I can pull out for you
> numerous cases of it being done, probably too numerous to count even
> in the examples. Shooting yourself in the foot is not restricted to
> one language or another, nor to the technological solution in use is
> my point. You can make a holy mess of any piece of code on any
> language you choose, and QML certainly doesn't force you to do
> anything you don't *really want to*.
>
>
> In other words, being "entirely" in C++ has also its downsides.
>
>
> Most certainly. One of the major downsides is it being much more
> complex and unforgiving, which doesn't necessarily mean it's better.
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org <mailto:Interest at qt-project.org>
> https://lists.qt-project.org/listinfo/interest
> <https://lists.qt-project.org/listinfo/interest>
>
> _______________________________________________
> 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/8680916e/attachment.html>
More information about the Interest
mailing list