如何在QML中使用ListView和自定义对象?

时间:2017-07-30 16:36:25

标签: listview pyqt qml qobject

目前我正在通过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中没有多大意义),但其中有几个例如是一个列表。我期望的是我必须将模型更改为类似的东西,但后来我得到“无法将多个值分配给单一属性”

    model: [Rectangle {
            property string customText: "1.jpg"
        },
        Rectangle {
            property string customText: "1.jpg"
        },
        Rectangle {
            property string customText: "1.jpg"
        }]

如果您需要任何进一步的信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

您可以使用ListModelListElement 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项Ref显示的列表中的项目。

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