Компонент QML недостаточно перемещен влево? - PullRequest
0 голосов
/ 01 декабря 2018

У меня проблема с позиционированием моего пользовательского компонента QML правильно.Компонент представляет собой метку с выходящей строкой (аннотация).

Чтобы линия указывала на конкретную точку, все, что мне нужно сделать, это установить компоненты x на target.x - width.Т.е. переместить весь компонент влево.Но это не продвигает его достаточно далеко влево.Любая идея, почему?

Я получаю этот результат, где строка аннотации должна указывать на синий прямоугольник:

enter image description here

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);
}
...