QML ShapePath 清晰路径元素

问题描述 投票:0回答:2

我想从我的

ShapePath
中删除所有路径元素。由于
pathElements
是一个 Qml 列表,因此修改它的唯一方法是将其设置为新的 Javascript 数组。因此,我希望只需为其分配一个空数组即可清除它。

我尝试过

path.pathElements = []
,但这对我不起作用。

然后我尝试了

path.pathElements = null
,它确实有效(
PathLine
不再绘制),但它打印了这个丑陋的错误消息:
QObject::connect: Cannot connect (nullptr)::changed() to QQuickShapePath::processPath()

还有其他想法吗?

重现代码:

Shape {
    anchors.fill: parent

    ShapePath {
        id: path

        strokeWidth: 2
        strokeColor: "green"
        fillColor: "green"

        Component.onCompleted: path.pathElements = []

        PathLine { x: 50; y: 50 }
    }
}
qt qml shapes qqmllistproperty
2个回答
0
投票

我在 Qt 提交了错误报告,他们确认了我的错误。

解决此问题之前的解决方法是首先分配

null
,然后分配
[]

Shape {
    anchors.fill: parent

    ShapePath {
        id: path

        strokeWidth: 2
        strokeColor: "green"
        fillColor: "green"

        Component.onCompleted: {
            path.pathElements = null
            path.pathElements = []
        }

        PathLine { x: 50; y: 50 }
    }
}

0
投票

我知道这是一篇旧文章,但真正的解决方案比前一个更好

根据数据表,附加到 shapePath 的 pathLine 由 PathElements 列表 (list) 组成。因此,存在一个解决方案来清除 javascript 中的列表

路径数据表:https://doc.qt.io/qt-6/qml-qtquick-path.html

看我的例子,我的shapePath被命名为cropPath:

    Shape{
        id: cropShape
        anchors.fill: parent
        property alias cropPath: cropPath
        ShapePath{
            id: cropPath

            startX: 0
            startY: 0
            fillColor: "#42ff00ff"
            strokeColor: "black"
            strokeWidth: 1
            dashPattern: [4, 5]
            strokeStyle: ShapePath.DashLine
            capStyle: ShapePath.RoundCap

        }
    }

function removePathElement(){
    cropPath.pathElements.splice(0, cropPath.pathElements.length)
}

另一个解决方案是:

function removePathElement(){
    while (cropPath.pathElements.length > 0)
        cropPath.pathElements.pop()
}

根据这个答案,第一个解决方案是“快得多”: 如何在 JavaScript 中清空数组?

ps:谢谢@skaldesh,自从我发现这一点以来,你的解决方案对我帮助很大

© www.soinside.com 2019 - 2024. All rights reserved.