以下のQMLコードを考えてみましょう。空のQMLキャンバスにポイントを挿入し、マウスをクリックして、左上隅に配置されたボタンを使用して、キャンバス上のすべての入力ポイントと対応するピクチャを消去しますQMLキャンバスからオブジェクトを完全に削除するにはどうすればよいですか?
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window{
id: root
width: 640
height: 480
visible: true
Canvas {
id: mycanvas
width: 1000
height: 1000
property var arrpoints : []
onPaint: {
var context = getContext("2d");
// Delete everything drawn before?
context.clearRect(0, 0, mycanvas.width, mycanvas.height);
// Render all the points as small black-circles
context.strokeStyle = Qt.rgba(0, 1, 1, 0)
// Draw all the points
for(var i=0; i < arrpoints.length; i++){
var point = arrpoints[i]
context.ellipse(point["x"], point["y"], 10, 10)
context.fill()
context.stroke()
}
}
// For mousing in points.
MouseArea {
id: mymouse
anchors.fill: parent
onClicked: {
// Record mouse-position into all the input objects
mycanvas.arrpoints.push({"x": mouseX, "y": mouseY})
mycanvas.requestPaint()
console.log(mycanvas.arrpoints)
} // onClicked
}// MouseArea
} // Canvas
Button {
text: "clear input"
onClicked: {
mycanvas.arrpoints.length = 0
mycanvas.requestPaint()
console.log(mycanvas.arrpoints)
}
}
}//Window
このコードは非常に奇妙な動作をします。キャンバスにいくつかの点を入力し、「入力クリア」ボタンをクリックするとします。予想どおり、キャンバス とarrpoints
の配列からすべての画像(つまり点に対応する小さな円)が消えて空に設定されます。
しかし、私は再びキャンバスをクリックし起動したときに、クリア画像は、新たなポイントが入力されると並んで、再描画です!なぜこれがすべきですか?コンソールに印刷した後も、arrpoints=[]
が表示されるので、問題はonPaint
セクションのキャンバスをクリアすることになるはずです。
QMLにキャンバスメモリを完全に消去するように指示するにはどうすればよいですか?