Доступ к динамическим объектам QML из C++

Кто-нибудь знает, как получить доступ и сохранить динамически созданные объекты QML из С++? Я использовал следующий код, предложенный на сайте Qt, для создания динамических объектов QML и попытки сохранить их в тип списка QML

    property list<Button> listButtons: [
        Button{ }
    ]
    function addButton(buttonname) {
        console.log("Creating Pin: "+buttonname)
        var component = Qt.createComponent("Button.qml");
        if (component.status == Component.Ready)
        {
            var newbutton = component.createObject(node);
            newbutton.x = 20;
            newbutton.y = 30;
            listButtons.append(newbutton) //I get a error here: listButtons.append [undefined] is not a function
        }
        else
        {
            console.log("Unable to create button: "+buttonname)
        }
     }

Спасибо.

CV


qml
person blueskin    schedule 23.05.2011    source источник


Ответы (1)


Документация по этому поводу есть. http://doc.qt.nokia.com/4.7/qml-list.html

Для этого вам нужно реализовать массив в виде списка

import QtQuick 1.0
import "script.js" as JsScript

Rectangle {
    width: 360
    height: 360

    function getList(){
        return JsScript.array;
    }

    Text {
        anchors.centerIn: parent
        text: "Hello World"
    }
    Item {
     Component.onCompleted: {
         console.log('complemented');
         JsScript.addItem('abc')
         console.log("Added:", JsScript.array[0])
     }
    }
}

script.js

var array = new Array();

function  getArray(){
    return array;
}
    function addItem(item) {
     array.push(item)
    }

из С++

QDeclarativeEngine engine;
QDeclarativeComponent component(&engine, "MyItem.qml");
QObject *object = component.create();

QVariant returnedValue;
QVariant msg = "Hello from C++";
QMetaObject::invokeMethod(object, "myQmlFunction",
     Q_RETURN_ARG(QVariant, returnedValue),
     Q_ARG(QVariant, msg));

returnedValue.toList();

Непроверенный код. хм, я не уверен в этом. Но, возможно, QVariant.toList() будет работать, а может быть, и нет. Вам придется попробовать.

person Abhijith    schedule 24.05.2011
comment
Сорри, я уже упоминал, что искал доступ к этим объектам на С++. Как я могу получить доступ к myArray из приложения C++? - person blueskin; 25.05.2011