如何解决QML:使用矩形实现自定义控件
我想实现一个有 7 层矩形的控件。顶部和底部 2 个矩形的大小相同。但是中间的 3 个矩形是顶部和底部 2 个矩形的宽度的 1/3,也是其中两个矩形。矩形之间的间距将保持不变。
如何使用 QML 中的最少代码来实现。 (即使用 1 个中继器或嵌套中继器或某种方式通过模型?)
我使用重复的代码设计它,只需添加 10 个矩形并正确锚定它们,但是当可以使用中继器/模型完成任务时,这不是一个好习惯。
解决方法
可以使用 GridLayout
填充此类矩形。它在 Qml Online App 中运行良好。
import QtQuick 2.3
import QtQuick.Layouts 1.12
GridLayout {
Repeater {
model: [{row: 0,column: 0,columnSpan: 3},{row: 1,{row: 2,columnSpan: 1},column: 2,{row: 3,{row: 4,{row: 5,{row: 6,columnSpan: 3}]
Rectangle {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.row: modelData.row
Layout.column: modelData.column
Layout.rowSpan: 1
Layout.columnSpan: modelData.columnSpan
Layout.preferredWidth: Layout.columnSpan
Layout.preferredHeight: Layout.rowSpan
color: Qt.rgba(Math.random(),Math.random(),1);
}
}
}
,
您可以使用 ListView 将给定的矩形填充为委托。在这种情况下,您只需要处理委托。根据需要定义两个委托,并根据给定主题中的索引将它们分配给 ListView 模型:Different delegates for QML ListView
,试试这个
Component{
id:rec2
Item{
property bool flag: true
width:300
height:20
Repeater{
model:!flag?1:2
Rectangle{
anchors.left: (flag && index==1)?parent.left:undefined
anchors.right: (flag && index==0)?parent.right:undefined
color: "transparent"
border.color: "black"
border.width: 3
height: parent.height
width: (flag)?(parent.width/3):parent.width
}
}
}
}
Column{
anchors.centerIn: parent
spacing: 10
Repeater{
id:repeter
model: [false,false,true,false]
Loader{
sourceComponent: rec2
onLoaded: item.flag=repeter.model[index]
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。