我想在C ++中使用Qt绘制7个圆圈
我想使用for循环; 但是,我无法,我实际上想要使用窗口的宽度来平均我的圆圈,这也没有成功。哪里错了。我是编程新手。 :)
这是我的代码:
for (int i = 0; i <= 6;i++)
{
int x = 0;
int y = (width()/6);
x =y+x;
canvas.drawEllipse(x, 40, 20, 20);
}
好的,我正在努力,现在我有五个圈子使用此代码
int x = 0;
for (int i = 0; i <= 6;i++)
{
x = x+(width()/6);
canvas.drawEllipse(x, 40, 20, 20);
}
但我希望第一个圈子开始 canvas.drawEllipse(0,40,20,20);
另外,如果我从一个页面切换到另一个页面,如何更改一个圆圈的颜色。它的应用程序大约有7页,每个圆圈代表一个页面,例如,如果我在第1页,则圆圈1应为绿色。
我被告知要为此创建一个函数但是如何引用它来引用我的页面和圆圈。感谢。
答案 0 :(得分:1)
让我们在这里做一些数学。
让Screen_Width为屏幕宽度,以像素为单位。 设Screen_Height为屏幕高度,以像素为单位。
理想圆的宽度与直径相同,或2 *半径
然而,这是现实,母猪我们必须考虑线宽。
因此,圆的实际宽度为:Diameter + 2 * Circle_Line_Width
;
此外,这是现实而不是理想的条件,我们希望圈子之间的间距 设间距是圆的外线之间的距离(以像素为单位)。
让Circle_Quantity为圆圈数。
因此,圆圈占据的总宽度为:
Circle_Width = Diameter + 2 * Circle_Line_Width + (Space_Between_Circles / 2);
圆圈(带间距)的可用空间为:
Available_Circle_Space = Screen_Width / Circle_Quantity;
现在就是诀窍,找到圆圈的中心 让我们找出圆属性的值。 求解直径:
Diameter = Circle_Width / (2 * Circle_Line_Width + (Space_Between_Circles/2));
请记住,圆的中心将是直径的中点,即Diameter / 2
。
所以,第一个中心点是:
0 /*Left edge ordinate */
+ (Space_Between_Circles/2)
+ Circle_Line_Width
+ (Diameter / 2)
下一个中心点位于:
Previous_Center_Point
+ (Space_Between_Circles/2)
+ Circle_Line_Width
+ (Diameter / 2)
这应该向您展示如何制作for
循环来绘制所有圆圈。
答案 1 :(得分:0)
切换循环中的两个语句:
int x = 0;
for (int i = 0; i <= 6;i++)
{
canvas.drawEllipse(x, 40, 20, 20); //0 on 1st iteration
x = x+(width()/6); //x = 0 + (width()/6), which will be used on 2nd iteration, etc.
}
要在第一个循环中将x
用作0,您可以在首次使用之前保存添加width()/6
。