我對 QML PathPolyLine“路徑”屬性有疑問。在檔案中它說:
它可以是用 Qt.point() 構造的 JS 點陣列
這是否意味著我可以像使用 JS 陣列一樣使用它?
這是一個示例,顯示 .push() 不適用于它的“路徑”屬性,但我可以設定一個自定義陣列,然后將我的自定義陣列指定為 PathPolyLine 元素的“路徑”屬性。那么編輯這個屬性的正確方法是什么?還像這樣設定此屬性的別名以property alias myArray: PathPolyLineID.path與“myArray”一起使用,而不影響“.path”。
main.qml
import QtQuick
import QtQuick.Controls
Window {
id: mainWinID
width: 640
height: 480
visible: true
title: qsTr("Hello World")
property var points: []
Button
{
property int i: 0
id: btnID
text: "Click Me!"
onClicked:
{
if (i == 2) pplID.path = mainWinID.points;
pplID.path.push(Qt.point(i,i 10));
mainWinID.points.push(Qt.point(i,i 10));
console.log('pplID.path:', pplID.path);
console.log('mainWinID.points:', mainWinID.points);
i ;
}
}
PathPolyline
{
id: pplID
path: []
}
}
結果是這樣的:
qml: pplID.path: []
qml: mainWinID.points: [QPointF(0, 10)]
qml: pplID.path: []
qml: mainWinID.points: [QPointF(0, 10),QPointF(1, 11)]
qml: pplID.path: [QPointF(0, 10),QPointF(1, 11)]
qml: mainWinID.points: [QPointF(0, 10),QPointF(1, 11),QPointF(2, 12)]
qml: pplID.path: [QPointF(0, 10),QPointF(1, 11)]
qml: mainWinID.points: [QPointF(0, 10),QPointF(1, 11),QPointF(2, 12),QPointF(3, 13)]
uj5u.com熱心網友回復:
沒有什么秘密,真的,只是初始化一個新的 JS 陣列和push()基于Qt.point().
使用有效的資料范圍并顯示它以用于可視化目的更容易測驗它是否正常作業:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Shapes 1.15
Window {
id: mainWinID
width: 640
height: 480
visible: true
property var points: [ ]
Button {
id: btnID
text: "Click Me!"
onClicked: {
// clear the JS array to delete existing points
mainWinID.points = [ ]
// initialize the JS array with data points
mainWinID.points.push(Qt.point(320, 240));
mainWinID.points.push(Qt.point(400, 360));
mainWinID.points.push(Qt.point(260, 360));
mainWinID.points.push(Qt.point(320, 240));
console.log('mainWinID.points=', mainWinID.points)
// use the array as the path for PathPolyline
pplID.path = mainWinID.points;
}
}
Shape {
anchors.fill: parent
anchors.centerIn: parent
ShapePath {
strokeWidth: 3
strokeColor: "black"
fillColor: "orange"
fillRule: ShapePath.OddEvenFill
PathPolyline {
id: pplID
}
}
}
}
使用此代碼,當單擊按鈕時,會呈現一個橙色三角形:
但是,您不能將元素推送到PathPolyline. 在這種情況下,您可以做的最好的事情是像這樣一次初始化整個陣列:
onClicked: {
// initialize PathPolyline.path
pplID.path = [
Qt.point(320, 240),
Qt.point(400, 360),
Qt.point(260, 360),
Qt.point(320, 240)
]
console.log('pplID.path=', pplID.path);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476820.html
