QML 动态视图排序教程 1 - 一个简单的 ListView 和委托
在应用程序的开始,我们定义了一个ListView 、一个为视图提供数据的模型和一个为视图中的项目提供模板的委托。
ListView 和委托的代码如下所示:
import QtQuick Rectangle { id: root width: 300 height: 400 Component { id: dragDelegate Rectangle { id: content required property string name required property string type required property string size required property int age width: view.width height: column.implicitHeight + 4 border.width: 1 border.color: "lightsteelblue" radius: 2 Column { id: column anchors { fill: parent margins: 2 } Text { text: qsTr('Name: ') + content.name } Text { text: qsTr('Type: ') + content.type } Text { text: qsTr('Age: ') + content.age } Text { text: qsTr('Size: ') + content.size } } } } ListView { id: view anchors { fill: parent margins: 2 } model: PetsModel {} delegate: dragDelegate spacing: 4 cacheBuffer: 50 } }
模型在单独的 QML 文件中定义,如下所示:
import QtQuick ListModel { ListElement { name: qsTr("Polly") type: qsTr("Parrot") age: 12 size: qsTr("Small") } ListElement { name: qsTr("Penny") type: qsTr("Turtle") age: 4 size: qsTr("Small") } }
演示
在应用程序的根矩形中定义的第一个项目是委托组件。这是一个模板,ListView 中的每个项目都是以此模板构建的。
委托中引用的name
、age
、type
和size
变量来自模型数据。名称与模型中定义的角色相对应。
Component { id: dragDelegate Rectangle { id: content required property string name required property string type required property string size required property int age width: view.width height: column.implicitHeight + 4 border.width: 1 border.color: "lightsteelblue" radius: 2 Column { id: column anchors { fill: parent margins: 2 } Text { text: qsTr('Name: ') + content.name } Text { text: qsTr('Type: ') + content.type } Text { text: qsTr('Age: ') + content.age } Text { text: qsTr('Size: ') + content.size } } } }
应用程序的第二部分是ListView 本身,我们将模型和委托绑定到 上。
ListView { id: view anchors { fill: parent margins: 2 } model: PetsModel {} delegate: dragDelegate spacing: 4 cacheBuffer: 50 }
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.