Javascript arcTo有时不';我不会被你吸引
我有下面的QML文件,它绘制了一个绿色的圆(通过QML矩形),并在圆上绘制了一个黑色的弧(通过画布和arcTo)。圆的位置和半径取决于窗口的大小。对于大多数尺寸,这似乎工作得很好,但对于一些弧只是消失。复制行为的完整main.qml如下所示:Javascript arcTo有时不';我不会被你吸引,javascript,canvas,qml,Javascript,Canvas,Qml,我有下面的QML文件,它绘制了一个绿色的圆(通过QML矩形),并在圆上绘制了一个黑色的弧(通过画布和arcTo)。圆的位置和半径取决于窗口的大小。对于大多数尺寸,这似乎工作得很好,但对于一些弧只是消失。复制行为的完整main.qml如下所示: import QtQuick 2.5 import QtQuick.Window 2.2 Window { visible: true height: 400 width: 400 Rectangle{ x
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
visible: true
height: 400
width: 400
Rectangle{
x:20
y:20
height: parent.height-40
width: parent.width-40
Rectangle{
id:circle
x:(parent.height<parent.width?parent.height:parent.width)/3
y:x
height:(parent.height<parent.width?parent.height:parent.width)/3
width: height
radius: height/2
border.color: 'green'
}
Canvas{
anchors.fill: parent
visible: true
onPaint: {
var ctx = getContext("2d");
ctx.strokeStyle = 'black';
ctx.lineWidth = 4;
var x = circle.x;
var y = circle.y;
var r = circle.radius;
ctx.beginPath();
ctx.moveTo(x,y+r);
ctx.arcTo(x,y+2*r,x+r,y+2*r,r);
ctx.stroke();
}
}
}
}
导入QtQuick 2.5
导入QtQuick.Window 2.2
窗口{
可见:正确
身高:400
宽度:400
长方形{
x:20
y:20
身高:父母身高-40
宽度:parent.width-40
长方形{
id:圆圈
x:(parent.height在我看来像个bug。它似乎与传入的坐标有关:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
id: window
visible: true
height: 400
width: 400
Rectangle {
anchors.fill: parent
anchors.margins: 20
Canvas {
anchors.fill: parent
onPaint: {
var ctx = getContext("2d")
ctx.strokeStyle = 'black'
ctx.lineWidth = 4
var x = 0
var y = 0
var r = parent.height / 2
ctx.beginPath()
// Visible:
ctx.moveTo(120.33333333333333, 180.5)
ctx.arcTo(120.33333333333333, 240.66666666666666, 180.5, 240.66666666666666, 60.166666666666664)
// Not visible:
// ctx.moveTo(120.66666666666667, 181)
// ctx.arcTo(120.66666666666667, 241.33333333333334, 181, 241.33333333333334, 60.333333333333336)
ctx.stroke()
}
}
}
}
在我看来是个bug。它似乎与传入的坐标有关:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
id: window
visible: true
height: 400
width: 400
Rectangle {
anchors.fill: parent
anchors.margins: 20
Canvas {
anchors.fill: parent
onPaint: {
var ctx = getContext("2d")
ctx.strokeStyle = 'black'
ctx.lineWidth = 4
var x = 0
var y = 0
var r = parent.height / 2
ctx.beginPath()
// Visible:
ctx.moveTo(120.33333333333333, 180.5)
ctx.arcTo(120.33333333333333, 240.66666666666666, 180.5, 240.66666666666666, 60.166666666666664)
// Not visible:
// ctx.moveTo(120.66666666666667, 181)
// ctx.arcTo(120.66666666666667, 241.33333333333334, 181, 241.33333333333334, 60.333333333333336)
ctx.stroke()
}
}
}
}
我在坐标中添加了一个Math.floor来解决这个问题:var x=Math.floor(circle.x);var y=Math.floor(circle.y);var r=Math.floor(circle.radius)@ralgrad,你找到了一个解决办法,这很好。你能不能也创建一个bug报告?我认为整个问题是JavaScript中的舍入问题,如果值舍入错误,那么就不能再绘制圆弧了。我在坐标中添加了一个Math.floor来解决这个问题:var x=Math.floor(circle.x);var y=Math.floor(circle.y);var r=Math.floor(circle.radius);@ralgrad,你找到了一个解决方法,这很好。你能不能也创建一个bug报告?我认为整个问题都是JavaScript中的舍入问题,如果值舍入错误,就无法再绘制圆弧。