Могу ли я контролировать точку присоединения делегата к PathView в QML? - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь обернуть голову вокруг PathView s в QtQuick. У меня нет проблем с созданием PathView и соответствующего делегата, чтобы эти делегаты отображались «по пути». Однако я не могу найти какое-либо определение того, что подразумевается под этим «вдоль», то есть как делегаты прикрепляются к пути. Рассмотрим следующий пример с путем, проходящим через вертикальный центр страницы:

import QtQuick 2.8
import QtQuick.Controls 2.1

ApplicationWindow {

    visible: true
    id: app
    width: 1280
    height: 720
    color: "#330000"

    PathView {
        id: pathView
        anchors.fill: parent
        model: 6

        delegate: Rectangle {
            id: item
            height: app.height * 0.5
            width: app.width * 0.25

            border.width: 5
            border.color: "#2f2f2f"
            color: "#d2d2d2"

            scale: PathView.itemscale
            z: PathView.z
        }

        interactive: true

        pathItemCount: 5
        preferredHighlightEnd: 0.5
        preferredHighlightBegin: 0.5

        path: Path {        
            startX: 0
            startY: app.height * 0.5

            PathAttribute { name: "z"; value: 0 }
            PathAttribute { name: "itemscale"; value: 0.5 }

            PathLine {
                x: app.width * 0.5
                y: app.height * 0.5
            }

            PathAttribute { name: "z"; value: 100 }
            PathAttribute { name: "itemscale"; value: 1 }

            PathLine {
                x: app.width
                y: app.height * 0.5
            }

            PathAttribute { name: "z"; value: 0 }
            PathAttribute { name: "itemscale"; value: 0.5 }
        }
    }
}

Этот код производит рендеринг: rendering

Предметы на пути, очевидно, прикреплены к их вертикальному центру, без четкого указания, задействован ли горизонтальный центр.

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

Документация по Qt здесь не сильно помогает. Могу ли я сделать это без злобного взлома, и если да, то как мне это сделать?

1 Ответ

0 голосов
/ 30 апреля 2018

Проблема в вашем случае вызвана масштабом, если мы прокомментируем эту строку, мы получим следующее:

enter image description here

и замечено, что он выровнен. Шкала использует точку отсчета, называемую transformOrigin, которая по умолчанию является Item.Center элемента, в вашем случае это должна быть Item.Bottom.

Внести следующие изменения:

delegate: Rectangle {
    id: item
    height: app.height * 0.5
    width: app.width * 0.25
    y:0

    border.width: 5
    border.color: "#2f2f2f"
    color: "#d2d2d2"

    scale: PathView.itemscale
    transformOrigin: Item.Bottom // +++
    z: PathView.z
}

получается:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...