Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改C++;用QML建模_C++_Qml - Fatal编程技术网

C++ 更改C++;用QML建模

C++ 更改C++;用QML建模,c++,qml,C++,Qml,我想扩展Qt文档中名为“objectlistmodel示例”的示例 (你可以穿上它) 我试图添加一个简单的GUI功能:一个改变内容的菜单项 模型中第一个数据项的名称。大概是这样的: MenuItem { text: "Item 123" onClicked: { myModel.setProperty(0,"name","Item 123") //this gives me error } } 我能够在QML中创建菜单,但我无法找到在模型中进行更改的正确方法 顺便说一句,s

我想扩展Qt文档中名为“objectlistmodel示例”的示例 (你可以穿上它)

我试图添加一个简单的GUI功能:一个改变内容的菜单项 模型中第一个数据项的名称。大概是这样的:

MenuItem {
  text: "Item 123"
  onClicked: {
    myModel.setProperty(0,"name","Item 123") //this gives me error
  }
}
我能够在QML中创建菜单,但我无法找到在模型中进行更改的正确方法


顺便说一句,setContextProperty和qmlRegisterType之间有什么区别(本例中仅使用第一个,但许多其他示例包括第二个)。

这种模型确实不适合修改。无法将更改通知视图。更好的选择是使用QabstracteModel:

使用QAbstractItemModel的更简单方法是通过QStandardItemModel:


setContextProperty()将单个命名属性添加到上下文中。qmlRegisterType()向QML引擎注册QObject派生的类型,允许它实例化该类型。例如,QDeclarativeItem类型在引擎中注册为“Item”,这是引擎在QML代码中出现
Item{}
时知道要创建什么的方式。

如果你问的问题基本上是“this gives me error”,那么你可能应该包括你得到的错误。只需将任何错误信息直接复制粘贴到问题中。感谢您的回答和评论。我还问了一个更具体的问题,在所有答案的帮助下,我现在对这个问题有了更好的理解。请注意,在上面提到的链接上,我添加了关于如何从QML更改QStandardItemModel数据的工作解决方案。在这里,我没有像这个问题中所希望的那样使用用户角色,但是给定的代码对初学者来说更有用。但是我得到了完全相同的错误:TypeError:expression'myModel.setProperty'[undefined]的结果不是函数。您需要在模型中实现setProperty()槽。谢谢。我决定采用QS标准模型。但我仍然迷失了方向,没有一个榜样。如何从QML访问QStandarItemModel的项?是否有另一种(更好的)方法可以从QML而不是setProperty()更改数据?@meolic只需向模型中添加一个QINVOKABLE方法,并从中返回您的项指针(请确保阅读关于CPPWownership等的文档,还要注意返回基类ptr之类的技巧可能不起作用(您将在QML中得到确切的未定义消息),但返回QObject指针仍然有效)。