В QML можно позиционировать элементы только относительно элементов того же уровня или относительно родителя. И координатная система элемента тоже рассчитывается как относительная относительно координатной системы родителя.
Однако может встать задача спозиционировать элемент относительно экрана на любом уровне вложенности.
Например, если сделан элемент «Небольшое окно уведомления с кнопкой OK», который используется в разных частях программы, то он должен иметь возможность сделать прямоугольную область MouseArea на весь экран. Эта область должна располагаться под элементами данного окна, чтобы не давать нажимать на другие элементы интерфейса программы, которые находятся за данным окном. Ну, то есть, поведение как у модального окна.
Выглядит это примерно так:
Item {
id: root
width: sizeMetric*0.4
height: sizeMetric*0.5
// Область клика мышкой на весь экран чтобы невозможно было кликнуть под элементами сообщения
Rectangle {
id: fullScreenRectangle
width: mainWindow.width
height: mainWindow.height
anchors: - как?
color: "#80101010"
MouseArea {
id: fullScreenMouseArea
anchors.fill: parent
onClicked: {
console.log("Disable click under message");
}
}
}
// Элементы окна
Rectangle {
id: windowInterface
anchors.fill: parent
...
}
}
Элемент fullScreenRectangle можно позиционировать только относительно root или windowInterface. Но элемент root не имеет информации о своем настоящем положении на экране, во всяком случае я не знаю как эту информацию получить.
Если сделать так:
Rectangle {
id: fullScreenRectangle
width: mainWindow.width
height: mainWindow.height
x: 0
y: 0
...
}
То прямоугольник будет отрисован не относительно 0,0 экрана, а относительно 0,0 элемента root.
В общем, вопрос в том, как можно в QML позиционироваться относительно экрана.