qt绘画扇形drawPie()和反着三角函数qAcos()

简介: qt绘画扇形drawPie(),绘画出弧线; 和由三角形的长度计算出角度,利用反三角函数qAcos()

同步博文:


问题背景:

在绘画进度条控件中,进度滑块当处于一开始和快完成,有弧度部分的时候,想要看的过程比较自然,就要自己手动填充这一部分"梯形(腰是两个段圆弧)";而一开始想到的居然是:直接求直线于弧线(圆角矩形的弧线部分)的交点的函数,我觉得应该是没有的。


解决方法:

“腰是圆弧梯形” 拆分为一个两个圆弧和一个(标准)等腰梯形来进行拆分,从而进行填。

其中需要计算角度

绘画扇形drawPie():

void QPainter::drawPie(const QRect &, int a, int alen)
参数1: 圆弧的圆心所处于矩形
参数2: 圆弧的开始始的角度°(单位1/16度)
参数3: 圆弧的转动的角度°(单位1/16度)

实际使用,注意其单位是1/16角度,而不是弧度

p->drawPie(topPointRect,41 * 16, (90 - 41) * 16);

反三角计算角度qAcos():

由三角形的边计算角度;需要包含头文件

 #include <QtMath>

另外一个计算角度的函数

qreal qAcos(qreal v)
Returns the arccosine of v as an angle in radians. Arccosine is the inverse operation of cosine.
参数: 直角边/斜边 (注意用double)
返回结果: 是弧度为单位

使用:

qreal raw = qAcos(30 * 1.0 / 40);   //=41.4096弧度

弧度和角度转换公式:

弧度 = 角度 * π / 180

π所对应的宏为:

//M_PI	The ratio of a circle's circumference to diameter, π

绘画上图的黑色圆弧代码:

qreal raw = qAcos(30 * 1.0 / 40);
int startRadius = raw * 180 / M_PI;
p->drawPie(topPointRect,startRadius * 16, (90 - startRadius) * 16);

最后的效果:

如图:然后同理,只需要将左侧的两个角都这样计算,然后同样填充蓝色,即可以做到圆角处的完美(当进度增加时候,加载想的自然)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值