QT实现动态扫描图

博主开发编译器为QT5.12.2,效果图如下图。
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9235602db4bb47c787d8d46b57464435.png)

获得初版扫描图后,感觉效果实在是太拿不出手了(如下图)。

在这里插入图片描述
后经一点点修改,包含背景修改,添加直线添加刻度等等,得到了文章最初的效果,显然没有OpenGL所画的效果好,但多少也可以给项目用了。
下面我就分部分享一下修改的地方,函数具体用法网上已经很全了,不过多的去讲解了。

首先是换背景,简单选个背景颜色,如更换只需要更改下面三元素即可。

this->setStyleSheet("QWidget{background-color:rgb(25,25,112)}");

其次用drawEllipse()和drawLine()两个函数用来画直线和圆。

int i=0;
    while ((50+(400/8.00*i))*2<width()&&(50+(400/8.00*i))*2<height()) {
        painter.drawEllipse(50+(width()/8.00*i), 50+(height()/8.00*i), width() - (50+(width()/8.00*i))*2, height() - (50+(height()/8.00*i))*2);
        i++;
        }
            for (int i=0;i<12;i++) {
        painter.drawLine(width() / 2, height() / 2,
                         width() / 2 + (width() - 20) / 2 * qCos(qDegreesToRadians(30.00*i)),
                         height() / 2 + (height() - 20) / 2 *  qSin(qDegreesToRadians(30.00*i)));
    }

上面弄完差不多有点样子了,下面通过rotate函数进行对坐标的旋转,用translate函数对坐标进行移动,然后画线,到达画出刻度尺的效果(不过这块还有一些小问题就是,这个方法只能画圆,当界面宽和长不相等的时候,无法画椭圆,如果有更好方法的大佬,希望能评论区指点一下,非常感谢。);

		painter.translate(width() / 2,height() / 2);
          painter.setFont(QFont("Calibri",10));
        for(int i=1;i<=360;i++){
               painter.rotate(1);
               painter.drawLine(0,-width() / 2+10,0,-width() / 2+13);
        }
        for(int i=1;i<=72;i++){
            painter.rotate(5);
            painter.drawLine(0,-width() / 2+10,0,-width() / 2+15);
        }
        for(int i=1;i<=36;i++){
            painter.setRenderHint(QPainter::Antialiasing);
            painter.rotate(10);
            painter.drawLine(0,-width() / 2+10,0,-width() / 2+20);
        }   

之后就是对扫描线的处理了,一根线实在是太丑了o(╥﹏╥)o。
利用QConicalGradient类,做一个渐变,然后用drawPie函数去画一个扇形,不会用QConicalGradient类的朋友可以不用渐变,直接画扇形就行,这个扇形跟着角度变化而变化,不要问我为啥乘16,我也不太清楚,就当是弧度传角度了。

 QConicalGradient gradient(width() / 2, height() / 2,angle);        
gradient.setColorAt(0.875, QColor(0, 255, 0, 0));                  
gradient.setColorAt(1, QColor(0, 255, 0, 155));//尾部                
painter.setBrush(gradient);                                        
painter.setPen(QPen(Qt::NoPen));//去掉外框线                            
                                                                   
painter.drawPie(10,10, width()-20, height()-20,angle*16,-45.00*16);

以上就是一个完整的动态扫描图就出来了,当然扫描图哪能没有目标呢?
利用以下代码,就是画了几个圆,然后透明度和大小定时变化,就形成了一个动态的小点点。让人看起来就是在闪。

painter.setBrush(QBrush(QColor(50, 255, 200,alpha))); 
//painter.drawEllipse(0,0,15,15);                     
painter.drawEllipse(200,200,cir_size,cir_size);       
painter.drawEllipse(100,100,cir_size,cir_size);       

总的来说,因为是陪人学习加感兴趣,从决定做到找资源学习并做出来用了1天多的时间(算很慢的了),效果还算可以,能达到自己的最低要求,后续还会尝试优化,有兴趣的朋友或愿意指导一下本菜鸟的大佬,欢迎留言讨论或指点,嘿嘿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值