[Development] QML preprocessor

Samuel Stirtzel s.stirtzel at googlemail.com
Mon Mar 18 10:15:36 CET 2019


Am So., 17. März 2019 um 13:35 Uhr schrieb Alberto Mardegan
<mardy at users.sourceforge.net>:
>
> Hi there!
>   When developing a QML module for the greater public one wants to
> provide a source package that can be built on multiple Qt versions.
> However, QML's lack of a preprocessor makes this rather cumbersome.
>
> Suppose that my module needs to provide an element like this:
>
> ====
> import QtQuick 2.10
>
> Item {
>     ...
>     Flickable {
>         boundsMovement: Flickable.StopAtBounds
>         ...
>     }
> }
> ====
>
> If I wanted to make this available to users of Qt 5.9 and older, I'd
> need to ship another file, instead, importing QtQuick 2.9 and removing
> that "boundsMovement" property.

To avoid duplication of qml files for different Qt versions it is
possible to export the QT_VERSION to qml:

main.cpp:
engine.rootContext()->setContextProperty("QT_VERSION", QT_VERSION);

Then in qml things like this are possible:
hueValue: (QT_VERSION >= 0x050900 ? oldColor.hslHue :
rgbToHsl(oldColor.r, oldColor.g, oldColor.b).h);

Where rgbToHsl(...) is a js function fallback for the lacking
color.hslHue in Qt 5.6

Another example for the QQC2 ScrollBar.policy in 5.9:
Component.onCompleted: {
    if(QT_VERSION >= 0x050900)
    {
        this.policy = Qt.binding(function (){ return
listView.contentHeight > listView.height ? ScrollBar.AlwaysOn :
ScrollBar.AlwaysOff; });
    }
}


-- 
Regards
Samuel


More information about the Development mailing list