首页 文章

QML - 创建可重用的ListView标头组件

提问于
浏览
1

我在一个页面上有3个列表视图,我想创建一个 ListView Headers 组件,我可以使用每个列表 .

所以我有一个ListView:

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

它引用了以下标头组件:

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"
                        }
                    }
                }
            }

如何使标头组件可重复使用,以便当我将 ListView 连接到 Headers 时,我还可以传入不同的 Headers ?

我知道我可以更改标头组件并添加 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中使用 Headers 组件时指定titleText'属性?

2 回答

  • 3

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

    例如:-

    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"
                }
            }
        }
    }
    
  • 5

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

    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"
        }
    }
    

    关于importingcustom types的QML文档 .

相关问题