参数如何从Qml传递到C ++?

时间:2016-08-05 12:20:06

标签: c++ qt qml

我想用以下方式从Qml调用C ++函数:

Item{
        id: qmlItem

        function loadModel(dataModel)
        {
            // setup my listview
        }

        MyDataModel{
            id: model
        }
        Button{
            onClicked: {
                cpp.addValues(model)
                loadModel(model)
            }
        }
    }

现在在C ++中我有以下功能:

void myCpp::addValues(MyDataModel* model)
{
    // here I would like to add items to my data model
    model->addItem();
}

现在,如果模型作为指针传递,这是可能的,但我不确定这是否是C ++ / Qml交互的行为。我写的作品还是我需要使用的另一种方法吗?

编辑:我编译了程序,它工作正常。但是,我想知道引擎盖下的内容。我的意思是QML是否通过指针发送参数?相同的方法是否适用于JavaScript数组(而不是MyDataModel)?

1 个答案:

答案 0 :(得分:0)

实际上,如果你想使用从C ++传递的ListView模型,你应该看看QAbstractItemModelQAbstractListModel(可能更好,更容易)你的类您继承并创建自己的模型以在qml中使用。要从您那里继承QAbstractListModel至少需要重新实现rowCount()data()方法,您还可以重新实现insertRows()removeRows()方法来动态添加/从模型中删除数据(这也将自动更新视图)。 您应该查看http://doc.qt.io/qt-4.8/qabstractlistmodel.htmlhttp://doc.qt.io/qt-4.8/qabstractitemmodel.html 。另外,在qtcreator中有一些关于如何实现这种模型的简单例子