https://doc.qt.io/qt-5/qml-qtquick-controls2-popup.html
Это то, что я пробовал. Я хочу, чтобы внутренние прямоугольники прямоугольника всплывающего окна заполняли всю область. Есть зазор слева и сверху.
Window
{
visible: true
width: 1000
height: 1000
title: qsTr("Hello World")
Rectangle
{
id: dot
color:"blue"; radius: 100
height: 33
width: 33
MouseArea
{
anchors.fill: parent
onClicked: popup.open()
}
}
Popup
{
id: popup;
width: 114
height: 88
x: 100; y: 45
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
Rectangle
{
color: "red";
anchors.fill: parent
ColumnLayout
{anchors.fill: parent
Rectangle{ height: 30; width: 100; border.color: "black"}
Rectangle{ height: 30; width: 100; border.color: "black"}
Rectangle{ height: 30; width: 100; border.color: "black"}
}
}
}
Вы должны знать о Popup
padding
, ColumnLayout spacing
.
Пробелы вызваны всплывающим окном padding
... если вы не хотите padding
, установите его на 0.
Но даже с 0 padding
,
Вы получите зазор справа ... потому что popup
width
(114) наследуется прямоугольником всплывающего окна, но внутренние прямоугольники установлены на фиксированное width
из 100 ... поэтому появляется зазор 14.
Если вы исправите это ... все равно вам придется учитывать Columnlayout
интервал ... он не равен 0 по умолчанию, что может привести к тому, что последний прямоугольник будет простираться ниже прямоугольника всплывающего окна, поэтому можно использовать clip
прямоугольника;
Например, этот код рисует прямоугольники, как и ожидалось.
Popup
{
id: popup;
padding: 0
width: 114
height: 88
x: 100; y: 45
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
Rectangle
{
color: "red";
anchors.fill: parent
ColumnLayout
{
anchors.fill: parent
Rectangle{ height:30; width: popup.width; border.color: "black"}
Rectangle{ height: 30; width: popup.width; border.color: "black"}
Rectangle{ height: 30; width: popup.width; border.color: "black"}
}
}
}
Если я хочу обобщить значения по умолчанию popup
и Columnlayout
, я бы подумал об использовании contentitem
, который дает размеры прямоугольника всплывающего окна:
например:
Popup
{
id: popup;
width: 114
height: 29 * 3
x: 100; y: 45
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
Rectangle
{
color: "red";
anchors.fill: parent
ColumnLayout
{
anchors.fill: parent
Repeater{
id: repeater
model: 3
Rectangle{ height: (popup.contentItem.height - parent.spacing*repeater.count)/repeater.count; width: popup.contentItem.width; border.color: "black"}
}
}
}
}