При использовании компонентов QML, таких как всплывающие подсказки или комбинированные списки, всплывающее меню всплывающих подсказок и комбинированных списков можно расположить с помощью атрибутов x и y.При настройке положения оси или y, при котором размеры всплывающей подсказки или всплывающей подсказки превышают окно программы, QML автоматически перемещает размеры, чтобы они помещались в окне программы.
Я предполагал, что это поведение является стандартным для всех элементов QML, но когда я попытался расположить элемент всплывающего окна, используя его координаты x и y, он не перемещается автоматически в пределах размеров окна.Есть идеи, как мне этого добиться?
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.Material 2.12
import QtGraphicalEffects 1.12
import QtQuick.Window 2.2
/*
This Component offers a similar function to a combobox except
the drop down menu is fully customizable.
*/
Item
{
id: control
property alias dropDownWidth: popup.width //width of drop down item
property alias dropDownHeight: popup.height //height of drop down item
readonly property alias dropDownVisible: popup.visible
property alias dropDownItem: popup.contentItem //place drop down contents here
property var closeDropDown: popup.close //function to close dropdown box (if you need additional close instances)
property var openDropDown: popup.open //function to open dropdown box (if you need additional open instances)
property var mouseAreaItem: mouseArea
property real boxRadius: 0
property real itemMargins: height * 0.1
property bool hovered: false
implicitHeight: 40
implicitWidth: 200
//--- Background of button
Rectangle
{
id: bgRect
anchors.fill: control
color: "grey"
radius: boxRadius
}
//--- Mouse Area
MouseArea
{
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onClicked:
{
if (popup.visible)
popup.close()
else
popup.open()
}
}
//--- DropDown Menu
Popup
{
id: popup
x: 0
y: control.height
width: control.width
height: contentItem.height
padding: 0
leftMargin: 0
background: Rectangle
{
anchors.fill: parent
color: "grey"
}
}
}