私は円/円が黄色の塗料を "+"ボタンのpress()で得るはずのqml (my program outputでプログラムを書いています。実際に私のコードは動作しますが、ここでの問題は、右中央からペイントキャンバスを開始することです。キャンバスペインティングの出発点としてトップセンターが欲しい。キャンバスペインティングは右中央から上中央に向かって開始されます
私に何か提案してもらえますか?それは始点のいくつかの数学的計算についてのすべてですが、それは私にクリックされていません。
object arc(real x, real y, real radius, real startAngle, real endAngle, bool anticlockwise)
あなたstartAngle
は円があなたが「右呼んで始まる描かれているので、0:
click here to see the current code output and my expectation
# import QtQuick 2.0
# import QtQuick.Window 2.0
Rectangle
{
id:main
width: 400
height: 400
property real counter: 0.0
property int count: 1
property real angle : 0;
property int value: 0
property int maxHours: 0
onValueChanged:
{
console.log("======> canvas.maxHours = ",maxHours);
if(maxHours < 4)
{
if(360 === (angle += 6))
{
angle = 0;//-1.5;
if(360 === (hoursAngle += 90))
{
// 0.00001 is needed to correct working ctx.arc(...) formulas on corner cases
angle = hoursAngle -= 0.0001
}
maxHours++;
}
canvas.requestPaint();
}
}
Canvas
{
id: canvas
anchors.centerIn: main
width: 170
height: 170
smooth: true
visible: true
renderStrategy: Canvas.Threaded;
renderTarget: Canvas.Image;
antialiasing: true;
onPaint:
{
var ctx = getContext("2d");
ctx.reset()
var centreX = width/2;
var centreY = height/2;
//M Indicator
ctx.beginPath();
ctx.fillStyle = Qt.rgba(0,0,0,0.3);
ctx.moveTo(centreX, centreY);
ctx.arc(centreX, centreY, width/2 - 5, 0, 360, false); // Outer circle
ctx.arc(centreX, centreY, width/2 - 10, 0, 360, true); // Inner circle
ctx.closePath();
ctx.fill();
ctx.beginPath();
ctx.fillStyle = "yellow"
ctx.moveTo(centreX, centreY);
console.log("===> Ravi centreX =",centreX)
console.log("===> Ravi centreY =",centreY)
console.log("===> Ravi angle =",angle)
console.log("===> Ravi angle * Math.PI/180 =",angle * Math.PI/180)
ctx.arc(centreX, centreY, width/2 - 5, 0, angle * Math.PI/180, false); // Outer circle
ctx.arc(centreX, centreY, width/2 - 10, angle * Math.PI/180, 0, true); // Inner circle
ctx.closePath();
ctx.fill();
}
}
Rectangle
{
id:addElement
width:35
height:35
anchors.right: parent.right
anchors.top: parent.top
Text
{
text: "+"
font.pixelSize: 50
anchors.centerIn: addElement
}
MouseArea
{
anchors.fill: addElement
onClicked:
{
value++;
}
}
}
}
は私がにMath.PI/2として開始角度を試みたが、うまくいきませんでした。 –
たとえば、「上の中心」から「右の中心」にペイントする場合は、「ctx.arc(centreX、centreY、width/2-5、Math.PI/2、0、false);」を実行します。ドキュメントは、_始まりのstartAngleとendAngleは、x軸からラジアン単位で測定されます_ – user2436719
私は円を描きたくありません。私は毎秒、円弧(幅5pxの円の境界)をペイントしたいと思います。ここでは、クロックプログレスバーウィジェットを作成することを目的としています。現在、私はタイマの代わりに "+"ボタンを使ってアークを描画しています。 ソースコードを実行してしばらくの間、 "+"ボタンを押すように要求すると、私の期待がより明確になります。 可能であれば、私の共有コードにあなたの提案を入れてもらえますか? –