QML动态对象传递属性

时间:2018-02-24 21:51:28

标签: javascript qt qml

如何将javascript属性传递给不是文本或数字的qml对象。我想将该属性传递给设置属性文本的c ++属性值。

var component;
var gauge;

function createVerticalGauge(setWidth,setX,setY,setID,setText,setValue) {
    component = Qt.createComponent("verticalbargauge.qml");
    console.log(component.status)
    if (component.status == Component.Ready)
        finishCreation(setWidth,setX,setY,setID,setText,setValue);
    else
        component.statusChanged.connect(finishCreation);
}

function finishCreation(setWidth,setX,setY,setID,setText,setValue) {
    if (component.status == Component.Ready) {
        gauge = component.createObject(adaptronicDash, {"id": setID, "gaugetext": setValue,
                                           "x": setX, "y": setY});
        gauge.width = setWidth;
        if (gauge == null) {
            // Error Handling
            console.log("Error creating object");
        }
    } else if (component.status == Component.Error) {
        // Error Handling
        console.log("Error loading component:", component.errorString());
    }
}

通过此调用调用JS:

Component.onCompleted: CreateVerticalGaugeScript.createVerticalGauge(300,10,300,"map","MAP",Dashboard.MAP);

Dashboard.MAP 设置对象的Text属性。 如果直接在QML文件中创建对象,则使用Dashboard.MAP设置文本,但是脚本只有“0”。

Dashboard.MAP是一个来自类Dashboard的qreal,它为我的qml对象提供值:

Q_PROPERTY(qreal MAP READ MAP WRITE setMAP NOTIFY MAPChanged)

如何使用javascript传递Dashboard.MAP。在我的示例中, setValue 的值为 qml:undefined

1 个答案:

答案 0 :(得分:1)

而不是传递Dashboard.MAP,只将Dashboard对象引用传递给函数。

然后,在创建属性对象时,请使用以下格式:

"gaugetext": Qt.binding(function(){return setValue.MAP})

(请记住,setValueDashboard

这种方式gaugetext将绑定到MAP,并随之改变。