我想从我的
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 提交了错误报告,他们确认了我的错误。
解决此问题之前的解决方法是首先分配
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 }
}
}
我知道这是一篇旧文章,但真正的解决方案比前一个更好
根据数据表,附加到 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,自从我发现这一点以来,你的解决方案对我帮助很大