3

我想从 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 之间有什么区别(此示例中仅使用第一个,但许多其他示例包括第二个)。

4

1 回答 1

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”,这就是引擎Item {}在 QML 代码中出现时知道要创建什么的方式。

于 2012-08-06T00:06:51.153 回答