У меня проблема с позиционированием моего пользовательского компонента QML правильно.Компонент представляет собой метку с выходящей строкой (аннотация).
Чтобы линия указывала на конкретную точку, все, что мне нужно сделать, это установить компоненты x
на target.x - width
.Т.е. переместить весь компонент влево.Но это не продвигает его достаточно далеко влево.Любая идея, почему?
Я получаю этот результат, где строка аннотации должна указывать на синий прямоугольник:
import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.1
import QtQuick.Shapes 1.0
Item {
property int slant: 10;
property int voffset: 50;
property int hoffset: 150;
property point target: Qt.point(300, 300);
implicitWidth: annotationLbl.implicitWidth + (slant*4);
implicitHeight: annotationLbl.implicitHeight + (slant*2);
x: target.x - width;
y: target.y - height;
// Draw line on right
Shape {
id: annotationLine
x: parent.width - slant
y: parent.height * 0.5
ShapePath {
strokeWidth: 2
strokeColor: "Red"
fillColor: "transparent"
startX: 0; startY: 0
PathLine { x: hoffset*0.15; y: 0 }
PathLine { x: hoffset*0.35; y: voffset-annotationLbl.height }
}
}
// Draw label shape
Shape {
id: annotationShp
width: parent.width
height: parent.height
anchors.centerIn: parent
ShapePath {
strokeWidth: 0
strokeColor: "transparent"
fillColor: "Red"
startX: slant; startY: 0
PathLine { x: width; y: 0 }
PathLine { x: width - slant; y: height }
PathLine { x: 0; y: height }
}
Label {
id: annotationLbl
anchors.centerIn: parent
text: "Foo"
}
}
}
Использование:
Annotation {
target: Qt.point(300, 300);
}