[Interest] QML defining an object property

Jérôme Godbout godboutj at amotus.ca
Mon May 31 21:07:05 CEST 2021


Here is the example you can try (if the link ever die):

import QtQuick 2.7
import QtQuick.Controls 2.3

Rectangle
{
    color: "red"
    anchors.fill: parent

    Row
    {
        Button
        {
            text: "test"
            onClicked:
            {
                a_.allo['toto'] = "changed";
                a_.alloChanged(); // require for value to be considered
                a_.allo['toto'] = "ignored";
            }
        }

        Button
        {
            id: b_
            text: "test2"
            onClicked:
            {
                text = "yaga";
            }
        }
    }

    Text {
        id: a_
        text: "Test: " + allo['toto'] + " Test2: " + allo["baba"]
        font.pixelSize: 50
        color: "white"
        anchors.centerIn: parent
        readonly property var allo: { "toto": "yeah", "baba": b_.text}
    }
}

Jérôme Godbout, B. Ing.

Software / Firmware Team Lead
O: (418) 682-3636 ext.: 114
C: (581) 777-0050
godboutj at dimonoff.com<mailto:godboutj at dimonoff.com>
[signature_969455327]<https://www.dimonoff.com/>
dimonoff.com<https://www.dimonoff.com/>
1015 Avenue Wilfrid-Pelletier,
Québec, QC G1W 0C4, 4e étage


From: Interest <interest-bounces at qt-project.org> on behalf of Jérôme Godbout <godboutj at amotus.ca>
Date: Monday, May 31, 2021 at 3:00 PM
To: Alexander Dyagilev <alervdvcw at gmail.com>, interest at qt-project.org <interest at qt-project.org>
Subject: Re: [Interest] QML defining an object property
This should be working (at least into 5.15.x). Binding value into the object should emit the changed normally.

Take care if you want a binding to react to values changed inside the dictionary/object inside you property, you will need to emit the change on the property.

Normally an easy way is to copy the value and modify it and reassign it. But here since you are readonly you cannot do that.

Try to emit changed when a dependencies is modified or when you set the value inside it.

Ex:
Function myEditFct()
{
    mainTbImg[‘up’] = “popo”;
    mainTbImgChanged(); // this is the missing piece often forgotten
}

Here an example that display the behavior
https://tinyurl.com/yg7ykwc4



From: Interest <interest-bounces at qt-project.org> on behalf of Alexander Dyagilev <alervdvcw at gmail.com>
Date: Monday, May 31, 2021 at 1:57 PM
To: interest at qt-project.org <interest at qt-project.org>
Subject: [Interest] QML defining an object property

Hello,

Am I right that this is not possible in QML?

readonly property var mainTbImg: {

        up: "some string",

        up_check: "some another string"

    }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210531/f61799f1/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 13927 bytes
Desc: image001.png
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210531/f61799f1/attachment.png>


More information about the Interest mailing list