LINUX.ORG.RU

Не могу спозиционировать Rectangle на весь экран в QML

 , , rectangle


0

1

Делаю я заготовку виджета. Нужно, чтобы когда он виден, при клике НЕ на его облась, чтобы виджет скрывался.

Я делаю так:

Window {
    id: picker

    width: 640
    height: 480

    Item {
        id: sdStorageListWidget
        visible: true

        // Рабочая область посередине экрана, в ней будет список sdStorageListView
        width: parent.width/2
        height: parent.height/2
        anchors.verticalCenter: parent.verticalCenter
        anchors.horizontalCenter: parent.horizontalCenter

        // Прямоугольник на весь экран, при нажатии на который виджет скрывается
        // Он нужен, чтобы виджет скрывался всегда при клике не на область списка
        Rectangle {
            anchors.fill: picker.contentItem
            color: "yellow"

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    sdStorageListWidget.visible=false;
                }
            }
        }

        // Зглушка для области списка
        Rectangle {
            id: sdStorageListView
            anchors.fill: sdStorageListWidget
            color: "lightblue"

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    console.log("Click on sdStorageListView");
                }
            }
        }
    }
}

На на строке определения желтого Rectangle появляется ошибка:
QML Rectangle: Cannot anchor to an item that isn't a parent or sibling.

Что-то я не вкурю, вроде бы всегда можно было позиционироваться относительно любых элементов, которые ближе к корню по иерархии вложения. А тут почему-то говорится что можно позиционироваться только относительно родителя или элементов того же уровня.

Другими словами, желтый прямоугольник можно позиционировать относительно parent, но невозможно относительно parent.parent (оно же picker.contentItem). То есть относительно границ окна не спозиционируешься. Что за бред?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 2)

Ну вытащи ты его из sdStorageListWidget. Да и прямоугольник тебе для цели не нужен, оставь только mousearea.

ChALkeR ★★★★★
()
Ответ на: комментарий от ChALkeR

Да я то вытащу, но тут принципиальный вопрос: с чего бы привязка желтого прямоугольника в данном коде разрешалась только к parent и sibling? А уже, например, к parent.parent привязаться нельзя?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Да я то вытащу, но тут принципиальный вопрос: с чего бы привязка желтого прямоугольника в данном коде разрешалась только к parent и sibling? А уже, например, к parent.parent привязаться нельзя?

For performance reasons, you can only anchor an item to its siblings and direct parent. http://doc.qt.io/qt-5/qtquick-positioning-anchors.html

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Мда, что-то я затупил. Вроде всегда выравнивал без проблем. Наверно я перепутал выравнивание с обращением по id, оно в пределах qml-файла свободно.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.