[英]Using clearRect outside the Canvas
Application draws an arc.应用程序绘制一条弧线。 I would like application to remove the arc after clicking on
mouseArea10
.我希望应用程序在单击
mouseArea10
后删除圆弧。 Is it possible to do it outside Canvas
, like under?是否可以在
Canvas
之外进行,例如在下面? How should I do this?我该怎么做?
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Extras 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1
ApplicationWindow {
visible: true
width: 1050
height: 700
color: "#b09273"
title: qsTr("Hello World")
MainForm {
anchors.fill: parent
id: mainform
mouseArea10.onClicked: {mojCanvas.context.clearRect(0, 0, mojCanvas.width, mojCanvas.height)}
}
Canvas {
id:mojCanvas
width: 1050
height: 590
anchors.top: parent.top
anchors.topMargin: 55
anchors.bottom: parent.bottom
anchors.bottomMargin: 55
anchors.left: parent.left
anchors.right: parent.right
contextType: "2d"
Path {
id: myPath
startX: 450; startY: 590
PathArc {
x: 0; y: 269.30848034096934944;
radiusX:625; radiusY: 625;
useLargeArc: false
direction: PathArc.Counterclockwise
}
}
onPaint: {
context.strokeStyle = "indigo";
context.lineWidth = 3;
context.path = myPath;
context.stroke();
}
}
}
It's just an option, but you could set your mojCanvas.visible
to false
as a quick solution.这只是一个选项,但您可以将
mojCanvas.visible
设置为false
作为快速解决方案。
Anyway, if you need to change your canvas, of course you can do it after clicking the mouseArea
.无论如何,如果您需要更改画布,当然可以在单击
mouseArea
。
The idea is to choose the right colour for your stroke depending on your background colour and to paint again the arc calling requestPaint()
这个想法是根据您的背景颜色为您的笔划选择正确的颜色,并再次调用
requestPaint()
绘制圆弧
Example:例子:
main.qml主文件
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Extras 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2
import QtQuick.Layouts 1.1
ApplicationWindow {
visible: true
width: 1050
height: 700
color: "#b09273"
title: qsTr("Hello World")
MainForm {
anchors.fill: parent
id: mainform
// mouseArea10.onClicked: {mojCanvas.context.clearRect(0, 0, mojCanvas.width, mojCanvas.height)}
mouseArea1.onClicked: {
mojCanvas.visible = true;
var context = mojCanvas.getContext("2d");
// Make canvas all white
context.beginPath();
context.clearRect(0, 0, mojCanvas.width, mojCanvas.height);
context.fill();
// Draw a line (just for testing)
context.beginPath();
context.lineWidth = 2;
context.moveTo(30, 30);
context.strokeStyle = "red"
context.lineTo(width-30, height-30);
context.stroke();
// New arc colour
mojCanvas.myColor = "cyan";
mojCanvas.requestPaint();
}
mouseArea2.onClicked: {
mojCanvas.visible = false
}
}
Canvas {
id:mojCanvas
width: 1050
height: 590
anchors.top: parent.top
anchors.topMargin: 55
anchors.bottom: parent.bottom
anchors.bottomMargin: 55
anchors.left: parent.left
anchors.right: parent.right
contextType: "2d"
property color myColor: "indigo"
Path {
id: myPath
startX: 450; startY: 590
PathArc {
x: 0; y: 269.30848034096934944;
radiusX:625; radiusY: 625;
useLargeArc: false
direction: PathArc.Counterclockwise
}
}
onPaint: {
context.strokeStyle = myColor;
context.lineWidth = 3;
context.path = myPath;
context.stroke();
}
}
}
MainForm.qml主窗体.qml
import QtQuick 2.5
Rectangle {
property alias mouseArea1: mouseArea1
property alias mouseArea2: mouseArea2
width: 360
height: 360
color: "cyan"
Rectangle {
width: 100;
height: 100;
color: "white"
MouseArea {
id: mouseArea1
anchors.fill: parent
}
Text {
anchors.centerIn: parent
text: "repaint"
}
}
Rectangle {
width: 100;
height: 100;
x: 150
color: "white"
MouseArea {
id: mouseArea2
anchors.fill: parent
}
Text {
anchors.centerIn: parent
text: "visible = false"
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.