如何将ListView与QML中的自定义对象一起使用?

如何将ListView与QML中的自定义对象一起使用?,listview,pyqt,qml,qobject,Listview,Pyqt,Qml,Qobject,目前我正在通过PyQT使用QT框架。我已经创建了一个自定义对象(从QObject继承),并且可以按照QML的预期使用它。我还在QML中创建了一个委托,该委托负责该对象的可视化表示,并按预期工作 但是,现在我想在ListView(再次在QML中)中显示这些对象中的几个对象的列表(其表示形式在委托中定义)。我似乎不明白这是怎么可能的,所以有人能给我一些建议吗 提前感谢您抽出时间 编辑:为了回应一些反应,我将尝试用一个例子来阐明我想要实现的目标。这里我们有一个矩形(这只是为了清晰起见,通常这是我的自定

目前我正在通过PyQT使用QT框架。我已经创建了一个自定义对象(从QObject继承),并且可以按照QML的预期使用它。我还在QML中创建了一个委托,该委托负责该对象的可视化表示,并按预期工作

但是,现在我想在ListView(再次在QML中)中显示这些对象中的几个对象的列表(其表示形式在委托中定义)。我似乎不明白这是怎么可能的,所以有人能给我一些建议吗

提前感谢您抽出时间

编辑:为了回应一些反应,我将尝试用一个例子来阐明我想要实现的目标。这里我们有一个矩形(这只是为了清晰起见,通常这是我的自定义对象),它有一个自定义属性(customText)和一个委托,该委托仅定义布局,这两者都起作用

ListView {
    height: 1000
    model: Rectangle {
            property string customText: "1.jpg"
        }
    delegate: Rectangle {
        width: 200
        height: 200
        Text {
            anchors.fill: parent
            text: model.customText
        }
    }
}
但是,现在我基本上不想要一个矩形(在ListView中没有多大意义),而是想要其中几个矩形,例如列表。我所期望的是,我必须将模型更改为类似这样的内容,但随后我得到“无法为单个属性分配多个值”:


如果您需要更多信息,请告诉我。

您可以使用
ListModel
liselement
qml类型。自定义模型的示例实现:

ListModel {
    id: modelElement
    ListElement { customText : "1.jpg"}
    ListElement { customText : "2.jpg"}
    ListElement { customText : "3.jpg"}
    ListElement { customText : "4.jpg"}
}

ListView {
    height: 1000
    model: modelElement
    delegate: Rectangle { // You can use your custom object here
        width: 200
        height: 200
        Text {
            anchors.fill: parent
            text: customText
        }
    }
}
ListElement
表示将使用ListView或Repeater项显示的列表中的项


您可以将自定义对象定义为
delegate
,然后将
customText
分配给
Text
元素。

为什么不在这里发布与问题相关的所有代码,而不是解释它呢?一种方法是继承
QAbstractListModel
并定义一个模型,该模型给出了每个问题的属性对象。@folibis因为我做了很多尝试,不知道哪段代码最接近我真正想要的,所以我想我实际上是在寻找QT是如何解决这个问题的。但是,我现在已经包含了一个代码片段,它应该在某种程度上澄清了这个问题。。QT解决这个问题的方法是按照Velkan的建议——创建保存数据的
QAbstractListModel
的后代。您创建的
QObject
的属性应该转换为
角色
。好的,根据
模型
可以是
ListModel
XmlListModel
visualitemodel
。在您的情况下,
Visualitemodel
更适合您的需要。有关更多信息,请参阅。
ListModel {
    id: modelElement
    ListElement { customText : "1.jpg"}
    ListElement { customText : "2.jpg"}
    ListElement { customText : "3.jpg"}
    ListElement { customText : "4.jpg"}
}

ListView {
    height: 1000
    model: modelElement
    delegate: Rectangle { // You can use your custom object here
        width: 200
        height: 200
        Text {
            anchors.fill: parent
            text: customText
        }
    }
}