• qt波位图


    在这里插入图片描述
    1,QPainter 绘制,先绘制这一堆蓝色的东西,
    2,在用定时器:QTimer,配合绘制棕色的圆。用到取余,取整

    #pragma once
    
    #include 
    #include 
    
    #include 
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class RadarSearchBeam; };
    QT_END_NAMESPACE
    
    class RadarSearchBeam : public QWidget
    {
    	Q_OBJECT
    
    public:
    	RadarSearchBeam(QWidget *parent = nullptr);
    	~RadarSearchBeam();
      //绘图事件
    	void paintEvent(QPaintEvent* event);
       //画横着一排圆圈
    	void drawARow(QPainter &painter, QPointF center,int width, int height);
    	//画竖着的几排
    	void drawAColumn(QPainter& painter, QPointF center, int width, int height);
    	.//把上面两个方法封装了
    	void drawSearchBeam(QPainter& painter, QPointF center, int width,int height);
    	//画棕色的圆圈
    	void drawAbearColorCircle(QPainter& painter, QPointF center, int width, int height);
    
    private:
    	Ui::RadarSearchBeam *ui;
    	int R = 10;
    	int diameter = 2 * R;
    	QTimer* timer;  //定时器
    	int timer_count;//定时器计数
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    cpp文件

    #include "RadarSearchBeam.h"
    #include "ui_RadarSearchBeam.h"
    #include
    #include
    RadarSearchBeam::RadarSearchBeam(QWidget *parent)
    	: QWidget(parent)
    	, ui(new Ui::RadarSearchBeam())
    {
    	ui->setupUi(this);
    
    	//使用定时器
        timer_count = 0;
        timer = new QTimer(this);
        connect(timer, &QTimer::timeout, [=] {
            timer_count++;
            qDebug() << timer_count << "dfddd";
            });
        timer->start(100);
    }
    RadarSearchBeam::~RadarSearchBeam()
    {
    	delete ui;
    }
    void RadarSearchBeam::paintEvent(QPaintEvent* event)
    {
        Q_UNUSED(event);
    
        QPainter painter(this);
        // 设置画笔颜色
        painter.setPen(QColor(0, 160, 230));
     	//把坐标原点移动到正中间
        painter.translate(width()/2,height()/2);
        drawSearchBeam(painter, QPointF(0,0),200,200);
        drawAbearColorCircle(painter, QPointF(0, 0), 200, 200);
    }
    void RadarSearchBeam::drawSearchBeam(QPainter& painter, QPointF center, int width, int height)
    {
    	 	//把坐标原点(正中间)移动到矩形左上角
        painter.translate(center.x() - width / 2, center.y() - height / 2);
        //把所有蓝色圆圈画完
        drawARow(painter, QPointF(0,0),width, height);
        drawAColumn(painter, QPointF(0, 0), width, height);
    }
    //配合定时器画移动的棕色圆圈
    void RadarSearchBeam::drawAbearColorCircle(QPainter& painter, QPointF center, int width, int height)
    {
       //一排几个圆=宽/直径
        int row_circle_num = width / diameter;
      //一竖几个圆=高/直径
        int column_circle_num = height / diameter;
        //总共多少个圆
        int all_circle_um = row_circle_num * column_circle_num;
        
        //这两个是配合定时器用
        int move_distance_x = diameter;
        int move_distance_y = diameter;
        //计时数小于圆圈数
        if (timer_count < all_circle_um)
        {
            int current_column_num = timer_count % row_circle_num;;
            int current_row_num = timer_count / row_circle_num;
    		画棕色的圆圈
            painter.setPen(QColor(185, 122, 87));
            painter.drawEllipse(QPoint(center.x() + move_distance_x*current_column_num, center.y()+ current_row_num* move_distance_y), R, R);
            //刷新绘图事件
            update();
        }
        else
        {
        //  //计时数大于圆圈数,把计时数清零,从新计数
            timer_count = 0;
            update();
        }
     }
      
    //画一排
    void RadarSearchBeam::drawARow(QPainter& painter, QPointF center,int width, int height)
    {
        //一排
        int row_num = width /diameter;
        for (int i = 0; i < row_num; i++)
        {
            painter.drawEllipse(QPoint(center.x()+i*diameter, center.y()), R, R);
        }
    }
    
    //竖着画几排
    void RadarSearchBeam::drawAColumn(QPainter& painter,QPointF center, int width, int height)
    {
        int num = height / diameter;
        for (int i = 0; i < num; i++)
        {
            drawARow(painter, QPointF(center.x(), center.y()+ i* diameter), width, height);
            qDebug() << QPointF(center.x(), center.y() + i * diameter);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
  • 相关阅读:
    11.8知识总结(web应用程序、手写web框架、Django框架等)
    关于排序算法的小结
    display详解
    大数据开发难么?适合什么人群?
    MySQL奇偶数判断
    精品基于Uniapp+Springboot实现的Android的学习生活交流APP
    51-41 Stable Video Diffusion,高质量视频生成新时代
    docker学习--最详细的docker run 各子命令解释与应用
    电商评论文本情感分类(中文文本分类+中文词云图)(第一部分-textcnn)
    git merge rebase 分别什么时候用?
  • 原文地址:https://blog.csdn.net/sunflower_2020/article/details/136275621