Я использую QML для отображения фонового изображения, и это изображение должно быть наложено значками. Каждый из этих элементов прикреплен MouseArea, поэтому значки фактически используются как кнопки.QML custom layout
Теперь значки должны масштабироваться и перемещаться вместе с фоновым изображением. Их поведение в макете должно быть таким, чтобы значки выглядели так, как будто они были частью фонового изображения (я не включил значки в фоновое изображение, потому что значки «активны» и связаны с MouseArea).
Поведение, которое я получаю, состоит в том, что значки хорошо масштабируются с фоновым изображением (при изменении размера изображения, соответственно, значки перемасштабируются), что отлично. Теперь, к сожалению, позиция x/y значков неверна, я не могу найти формулу для x/y, так что значки перемещаются вместе с изменением размера фона и дают ощущение, что значок является частью фонового изображения ,
Вот мой текущий код:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
Rectangle
{
color: palette.grey
// Manual move background and buttons.
Image
{
id: robotBody
fillMode: Image.PreserveAspectFit
anchors.top: parent.top
anchors.topMargin: 10
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
height: parent.height * 0.8
source: "../UI/Pictures/ManualMove_body.png"
smooth: true
// Buttons.
Image
{
id: xFrontButton
fillMode: Image.PreserveAspectFit
source: "../UI/Icons/ManualMove_XFront.png"
smooth: true
x: 0.8 * parent.paintedWidth
y: 0.8 * parent.paintedHeight
transformOrigin: Item.TopLeft
width: implicitWidth * robotBody.paintedWidth/robotBody.implicitWidth
// NOTE: no need to specify the height because of the preserve aspect ratio fill mode.
MouseArea
{
id: xFrontMouseArea
anchors.fill: parent
hoverEnabled: true
onPressed: { uiController.onXFrontMouseAreaPressed() }
onReleased: { uiController.onXFrontMouseAreaReleased() }
}
}
}
}
Любая идея о том, что происходит не так?
Thanks,
Antoine.
Я добавил некоторые пользовательские образы моих собственных, чтобы проверить, называя их больших и малых + инвалидов вещи, которые не были необходимы или недоступны с Qt 5.5 у меня есть. – mlvljr
Привет, mlvljr, знаешь что? Ты качаешься: все работает хорошо! Теперь я не уверен, что понимаю, почему это необходимо: я бы ожидал, что * (parent.width - parent.paintedWidth)/2 * будет необходимо, если transformOrigin был центром изображения, но я действительно изменил это явно на * transformOrigin: Item.TopLeft *, просто чтобы не добавлять это * (parent.width - parent.paintedWidth)/2 *. Это нормально, если мне нужно добавить этот код, просто я не понимаю, почему я должен ... – arennuit
Спасибо, причина в том, что вы на самом деле ничего не трансформируете (т. Е. Никаких поворотов или чего-то другого), просто позиционируя элементы через хорошие старые x, y, w, h -, а затем все значения x и y находятся слева и сверху, а w и h растягиваются вправо и снизу - и у нас нет другого способа справиться с этой палочкой изображение сверху другого случая, кроме того, чтобы найти смещения видимой части родительского изображения слева и сверху (и, учитывая, что предмет кажется центрированным по вертикали и горизонтали, когда соотношение сторон сохраняется, мы получаем, где мы:). – mlvljr