QML Автоматическое позиционирование всплывающих окон, если x или y приводят к тому, что Popup превышает размеры окна - PullRequest
0 голосов
/ 26 сентября 2019

При использовании компонентов 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"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...