QML - 创建一个 re-usable ListView header 组件

QML - Creating a re-usable ListView header component

我在单个页面上有 3 个列表视图,我想创建一个 ListView header 组件,我可以将其用于每个列表。

所以我有一个 ListView:

            ListView {
                id: listOne
                spacing: 5
                header: headerComponent
                model: ListOneModel
            }

它引用了以下 header 组件:

            Component {
                id: headerComponent

                Rectangle {
                    width: ListView.view.width
                    height: 50
                    Label {
                        text: "List One"
                        font.pixelSize: 20
                        elide: Label.ElideRight
                        width: ListView.view.width
                        padding: {
                            left: 14
                        }
                        background: Rectangle {
                            color: "red"
                        }
                    }
                }
            }

如何制作 header 组件 re-usable 以便在将 ListView 连接到 header 时我也可以传入不同的标题?

我知道我可以更改 header 组件并添加一个 titleText 属性,如下所示:

            Component {
                id: headerComponent

                property string titleText: "My Title"

                Rectangle {
                    width: ListView.view.width
                    height: 50
                    Label {
                        text: titleText
                        font.pixelSize: 20
                        elide: Label.ElideRight
                        width: ListView.view.width
                        padding: {
                            left: 14
                        }
                        background: Rectangle {
                            color: "red"
                        }
                    }
                }
            }

但是在我的 ListView 中使用 header 组件时如何指定标题文本' 属性?

创建新文件调用 ListHeader.qml 包含您的 header:

import QtQuick 2.0
import QtQuick.Controls 1.1

Rectangle {
    property alias name: mylabel.text
    width: ListView.view.width
    height: 50
    Label {
        id: mylabel
        text: "List One"
        font.pixelSize: 20
        elide: Label.ElideRight
        width: parent.width
        padding: {
            left: 14
        }
        background: Rectangle {
            color: "red"
        }
    }
}

并像这样使用它:

ListView {
    header: ListHeader{
        name: "ListOneNewName"
    }
}

关于 importing and custom types.

的 QML 文档

您可以在每个列表视图中设置一个 属性,然后从页眉组件中访问该 属性。

例如:-

ListView {
    id: listOne
    property string headertitle: "list one header"
    spacing: 5
    header: headerComponent
    model: ListOneModel
}

ListView {
    id: listTwo
    property string headertitle: "list two header"
    spacing: 5
    header: headerComponent
    model: ListTwoModel
}

ListView {
    id: listThree
    property string headertitle: "list three header"
    spacing: 5
    header: headerComponent
    model: ListThreeModel
}


Component {
    id: headerComponent

    Rectangle {
        width: ListView.view.width
        height: 50
        Label {
            text: ListView.view.headertitle
            font.pixelSize: 20
            elide: Label.ElideRight
            width: ListView.view.width
            padding: {
                left: 14
            }
            background: Rectangle {
                color: "red"
            }
        }
    }
}