使用GridView作为模板对象 - 如何将ListModel设置为别名?

时间:2016-12-14 02:11:17

标签: string oop gridview qml alias

我目前正在开展一个大型QML项目,而且我已经达到了这样一个程度,即创建一个基本上是页面模板的内容,我可以添加为少量信息尽可能在每个页面的定义中。

目前,我有一个MyPage.qml文件,它定义了诸如背景鼠标区域之类的对象以及每个页面共有的元素,例如后退按钮,但后来我遇到了我的问题 - 不是每个页面都是相似的

每个页面中的元素在网格中对齐。最初我使用行和列来组织这些元素,但我认为GridView对象更有利。

现在,这是我的实施:

Item {
//MyPage.qml
    id: page
    default property alias contentmodel: content.model

    ...

    GridView{
        id: content
        anchors.fill: parent
        cellWidth: parent.width/4
        cellHeight: parent.height/6
        focus: true
        model: contentmodel

        delegate: Item{
            height: content_background.height/6
            width: content_background.width/4

            property var entry: entries.split(",")

            MyComboBox{
                id: del_combo
                height: parent.height
                width: parent.width
                entries: entry
            }
        }
    }
}

然后从实际页面定义中实例化,其重要特征是:

MyPage {

    ...

    ListModel {
        id: contentmodel
        ListElement { entries: "string1,string2" }
        ListElement { entries: "string3,string4,string5,string6,string7" }

        ...

    }
}

通过这种方式,我的目标是让不同的页面由不同的组合框组成,从相同的源中提取相似的代码,并且重叠最少。

还值得注意的是"条目"的性质。它是由连接的子串组成的字符串,以逗号分隔,然后在MyPage.qml中拆分回其组件部分。这与QML ListElement pass list of strings

中建议的相同

MyPage.qml在接收此字符串时遇到问题,通常只向MyComboBox对象提供第一个元素,或者根本没有。

所以我的问题是,我在这个实现中哪里出错了?我的方法有什么根本性的错误吗?是否有使用别名的替代方法?你有任何能够实现这个目标的示例代码吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您已在contentmodel中定义了属性MyPage.qml

使用MyPage组件时,您需要将ListModel归因于contentmodel媒体资源,而不是将ListModel id设置为contentmodel

这应该有效:

MyPage {
    contentmodel : ListModel {
        ListElement { entries: "string1,string2" }
        ListElement { entries: "string3,string4,string5,string6,string7" }
    }
}