我可以在QML中将委托的附着点控制到PathView吗?

时间:2018-04-30 14:48:51

标签: qt qml qt5 qtquick2 qt-quick

我试图在QtQuick中绕过PathView。我创建一个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 }
        }
    }
}

此代码生成此呈现:idle timeout

路径上的物品显然与垂直中心相连,没有明确指示是否也涉及水平中心。

现在我想将项目放在路径的顶部,即矩形应该是底部对齐,其底部边框位于屏幕的中心。换句话说,我想通过底部锚点而不是中心来附加它们。

Qt文档在那里没什么大不了的。我能否在没有恶意黑客攻击的情况下实现这一目标,如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:1)

您的案例中的问题是由比例引起的,如果我们评论该行,我们会得到以下内容:

enter image description here

并且观察到它是对齐的。 Scale使用名为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