Loader,带参数的setSource

时间:2017-06-30 07:21:28

标签: c++ qt qml loader

当我通过Loader qml(setSource)加载组件时,我应该在Test.qml项目上设置属性stringa1和stringa2:

Page1.qml

import QtQuick 2.7

Page1Form {

    button1.onClicked: {
        console.log("Button Pressed. Entered text: " + textField1.text);
        itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1"}, {"stringa2": "ScrivoStr2"})
    }

    itemToFill.children:
        Loader {
            anchors.fill: parent
            id: itemLoader
        }
}

Test.qml

import QtQuick 2.4

TestForm {

    property string stringa1
    property string stringa2

    signal setStr1(string str1)

    anchors.fill: parent

    Component.onCompleted: {

        button.text = stringa1 + " - " + stringa2

    }

    button.onClicked: console.log("Push");

}

当我使用以下命令设置stringa1和stringa2时:

itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1"}, {"stringa2": "ScrivoStr2"})

Test.qml只读stringa1值。

在Qml Loader组件和Item加载之间设置/传输参数的最佳方法是什么?谢谢你的建议

最诚挚的问候 丹尼尔

1 个答案:

答案 0 :(得分:1)

应该是:

itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1", "stringa2": "ScrivoStr2"})

请注意setSource is declared as

object setSource(url source, object properties)

它只接受一个包含所有属性的对象。您正在传递多个对象。在您的情况下,只考虑第一个,所有其他的都被丢弃 如果必须使用多个参数,请将所有参数放在一个对象中。就是这样。