QML。如何为所有父级拉伸网格 space
QML. How to stretch Grid for all parent space
我有一个自定义按钮:
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
中的所有免费 space。我怎样才能做到这一点?谢谢。
Grid
只是根据项目的大小在其中放置项目。要主动调整项目大小,您需要使用 GridLayout
, and tell it how the items should be resized with 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
是 Grid 的 ID。
不使用稍微贵一点的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
}
}
}
}
}
我有一个自定义按钮:
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
中的所有免费 space。我怎样才能做到这一点?谢谢。
Grid
只是根据项目的大小在其中放置项目。要主动调整项目大小,您需要使用 GridLayout
, and tell it how the items should be resized with 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
是 Grid 的 ID。
不使用稍微贵一点的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
}
}
}
}
}