使用QML更改C ++模型

时间:2012-08-05 23:12:18

标签: c++ qml

我想从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 个答案:

答案 0 :(得分:3)

这种模型真的不适合修改。视图无法通知更改。更好的选择是使用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 {}时知道要创建的内容。