我有一个自定义按钮:
import QtQuick 2.0
Rectangle {
id: xobutton
width: 100
height: 100
property string label: "?"
border.width: 2
Text {
id: xobuttonLabel
text: label
font.pointSize: 75
anchors.centerIn: parent
}
}
它有一个父Rectangle
:
Rectangle {
width: 500
height: 500
Grid {
anchors.centerIn: parent
rows: 3; columns: 3; spacing: 0
Repeater {
model: 9
Xobtn { }
}
}
}
我需要在Grid
中展开父Rectangle
}中所有可用空间的所有按钮。我怎样才能做到这一点?感谢。
答案 0 :(得分:4)
Grid
只需将商品放在其中,尊重商品'尺寸。要主动调整项目的大小,您需要使用GridLayout
,并告诉它应如何使用Layout
attached properties调整项目的大小。所以你的代码变成了这样的代码,注释显示代码的变化:
import QtQuick.Layouts 1.1 // needed for GridLayout
Rectangle {
width: 500
height: 500
GridLayout {
anchors.fill: parent // GridLayout must have the right size now
rows: 3; columns: 3
columnSpacing: 0; rowSpacing: 0 // changed from spacing: 0
Repeater {
model: 9
Xobtn {
// attached properties guiding resizing
Layout.fillHeight: true
Layout.fillWidth: true
}
}
}
}
如果由于某种原因不想依赖QtQuick.Layouts
,那么你必须自己计算width
和height
,但如果你需要,这是相当笨拙的除了统一网格之外的任何东西,例如:
Xobtn {
height: grid.parent.height / grid.columns - grid.spacing
width: grid.parent.width / grid.rows - grid.spacing
}
其中grid
将是网格的ID。
答案 1 :(得分:0)
如果不使用价格稍贵的QtQuick.Layouts,你可以做这样的事情(但是你需要知道放在网格中的物品的大小:
import QtQuick 2.0
Rectangle {
id: root
width: 500
height: 500
readonly property int rectSize: 100
Grid {
anchors.centerIn: parent
rows: 3; columns: 3;
columnSpacing: (parent.width - (root.rectSize * columns)) / (columns - 1)
rowSpacing: (parent.height - (root.rectSize * rows)) / (rows - 1)
Repeater {
model: parent.rows * parent.columns
Rectangle {
id: xobutton
width: root.rectSize
height: root.rectSize
property string label: "?"
border.width: 2
Text {
id: xobuttonLabel
text: label
font.pointSize: 75
anchors.centerIn: parent
}
}
}
}
}