[Interest] Structuring of QML app as set of interlinked screens for maximum code reuse

Elvis Stansvik elvstone at gmail.com
Tue Mar 22 20:19:17 CET 2016


2016-03-22 20:13 GMT+01:00 Elvis Stansvik <elvstone at gmail.com>:
> Hi all,
>
> I'm working on a fullscreen Qt Quick/QML app (for machine control)
> which will consist of a set of interlinked screens, with key presses
> as the only interaction method.
>
> Each screen will have roughly the following QML structure:
>
> Rectangle {
>
>     NavBar {
>         id: topBar
>         ...
>         controls for navigation and information stuff,
>         different depending on which screen
>         ...
>     }
>
>     Rectangle {
>         id: topSeparator
>         ...
>         aesthetic divider rectangle between top nav bar and content.
>         ...
>     }
>
>     Rectangle {
>         id: content
>         ...
>         main content here, different depending on which screen.
>         ...
>     }
>
>     Rectangle {
>         id: bottomSeparator
>         ...
>         aesthetic divider rectangle between top nav bar and content.
>         ...
>     }
>
>     NavBar {
>         id: bottomBar
>         ...
>         controls for navigation and information stuff,
>         different depending on which screen
>         ...
>     }
> }

To clarify, think of NavBar as just another Rectangle in the example
above. It's just a custom item with some common visual properties.

Elvis

>
> And I'm now trying to find a good structure that will minimize
> repetition of QML code.
>
> I understand that QMLs main model for code reuse is composition, but
> that it also has a form of "inheritance": by defining a new Item in a
> separate file using another Item as the top level item and redefining
> some of its properties, I'm sort of inheriting that item.
>
> I could save the above general structure in a Screen.qml, and in
> FooScreen.qml, BarScreen et.c. do:
>
> Screen {
>     ...
>     override some properties
>     ...
> }
>
> But this will only allow me to redefine properties, and add new child
> items. How would I then be able to define both which content goes in
> the main area (the content Rectangle in the "base" item) and in the
> two navigation bars (topBar and bottomBar Rectangles)?
>
> It seems QML is not really meant to be used this way, and I'd have to
> essentially redefine these things in each of my screens, even if
> they'll all have the same general structure? There's no "template"
> mechanism so to speak?
>
> I'm very thankful for any tips from people more experienced with Quick / QML.
>
> And if you know of a well designed full screen QML app modeled as a
> set of interlinked screens with keyboard navigation, I'm idle ears.
>
> Cheers,
> Elvis



More information about the Interest mailing list