我想从Qt文档中扩展名为"Object ListModel Example"的示例(您可以在http://qt-project.org/doc/qt-4.8/declarative-modelviews-objectlistmodel.html上获取它) .
我正在尝试添加一个简单的GUI功能:一个菜单项,用于更改模型中第一个数据项的内容(即名称) . 像这样的东西:
MenuItem {
text: "Item 123"
onClicked: {
myModel.setProperty(0,"name","Item 123") //this gives me error
}
}
我能够在QML中创建菜单,但我找不到在模型中进行更改的正确方法 .
顺便说一下,setContextProperty和qmlRegisterType之间有什么区别(在这个例子中只使用了第一个,但是许多其他例子包括第二个) .
1 回答
这种模型真的不适合修改 . 视图无法通知更改 . 更好的选择是使用QAbstractItemModel:http://qt-project.org/doc/qt-4.8/declarative-modelviews-abstractitemmodel.html
使用QAbstractItemModel的更简单方法是通过QStandardItemModel:http://qt-project.org/doc/qt-4.8/qstandarditemmodel.html
setContextProperty()将一个命名属性添加到上下文中 . qmlRegisterType()使用QML引擎注册QObject派生类型,允许它实例化该类型 . 例如,QDeclarativeItem类型在引擎中注册为"Item",这是引擎在QML代码中出现
Item {}
时知道要创建的内容 .