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