我目前正在开展一个大型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对象提供第一个元素,或者根本没有。
所以我的问题是,我在这个实现中哪里出错了?我的方法有什么根本性的错误吗?是否有使用别名的替代方法?你有任何能够实现这个目标的示例代码吗?
感谢您的时间。
答案 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" }
}
}