如何在qml之间传递对象

Posted

技术标签:

【中文标题】如何在qml之间传递对象【英文标题】:How to pass objects between qml 【发布时间】:2016-10-26 04:46:14 【问题描述】:

我想将一个对象从一个 qml 传递到另一个 qml。 我有一个列表模型。

ListModel 
       id:favouriteapp
           ListElement 
               id: 1
               name:"ABSC"
               title:"5:03pm"
               description:"heloo-1"
               icon1:"images/climate_icon.png"
               icon2:"images/climate_icon.png"
               pinStatus : false
               isLoaded: false

           
           ListElement 
               id: 2
               name:"GHTT"
               title:"Home at 5:23pm"
               description:"via Gaydon Road-2"
               icon1:"images/navigation_icon.png"
               icon2:"images/navigation_icon.png"
               pinStatus : false
               isLoaded: false

           

现在我想通过字符串值将ListElement 的每个属性传递给其他qml。

如何将整个 ListElement 对象传递给其他 qml。

【问题讨论】:

首先id 不能是字符串也不能是数字。 Read 文档。只需创建它,例如 id: obj1 并传递 obj1 作为对该项目的引用。 @folibis: id 是我的“ListElement”中的属性之一,我已经编辑了代码 您刚刚删除了ids?你看我的回答了吗? @folibis: 我如何传递对象的 id 而不是字符串。 【参考方案1】:

正如@folibis 所说,您需要为您的对象提供正确的 id

ListElement 
    id: obj1
    ...

这里是 MyFile.qml,您可以将引用传递给您的 ListElement 对象:

Item
    ...
    function myFunction(listElementObject)
        //whatever you need to do with your object
    

在与ListModel 相同的 QML 文件中,您将拥有

MyFile
    id: myFileId


Component.onCompleted: myFileId.myFunction(obj1)

【讨论】:

【参考方案2】:

您始终可以使用favouriteapp.get() 将任何列表元素作为 javascript 对象访问,并将该对象传递到您需要的任何地方。

您还可以允许其他组件访问模型并让它访问它需要的列表元素。

您还可以让其他组件提供数据对象或单独的属性,并将它们绑定在您可以访问模型的位置。

【讨论】:

通过使用 'favouriteapp.get()' 如何从其他 qml 访问模型。我的模型 ID 'favouriteapp' 范围仅在第一个 qml 中。 你的意思是选项2?将属性添加到其他组件并将您的列表模型分配给该属性 没有。我想将一个对象从一个 qml 传递到另一个 qml。 我列出了三个选项。你问如何做选项2。我也回答了。那么在这里重复你的问题有什么帮助呢?

以上是关于如何在qml之间传递对象的主要内容,如果未能解决你的问题,请参考以下文章

如何将组件指针从 QML 传递到 C++?

如何在 QWebEngineView 中将值从 QML 传递到 JavaScript

如何加载相同的 QML 文件并传递不同的属性

如何将 QPixmap 从 C++ 模型传递到 QML?

如何正确地将 ComboBox 的模型从 python (pyQt5) 传递给 QML?

如何在 QML 视图之间动态更改