Qt5-雷达项目

界面:

widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QTimer>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void paintEvent(QPaintEvent *event) override;
private:
    Ui::Widget *ui;
    QTimer *timer;
    int startAngle=0;
};
#endif // WIDGET_H

widget.c

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QPainter>
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout,[=](){
        //不断变化扇形的启动位置
        startAngle += 4;
        if(startAngle >= 360){
            startAngle = 0;
        }
        update();
    });
    timer->start(30);
    
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter paint(this);//实列化一个画家
    paint.setRenderHint(QPainter::Antialiasing,true);//时画出来的看起来更顺滑
    QBrush brush(Qt::gray);//实列化一个画刷
    paint.setBrush(brush);//将画刷交给画家paint
    
    //应为现在画家拿的是黑色画刷所有画出来黑色的矩形,rect为窗口这个矩形
    paint.drawRect(rect());
    paint.setBrush(Qt::NoBrush);//将画家的画刷丢掉
    QPen pen(Qt::green,3);//实力画一个粗细程度为3的绿色画笔
    paint.translate(rect().center());//设置0点
    paint.setPen(pen);//将画笔交给画家,现在画家拿的是画笔
    
    /*画圆*/
    paint.drawEllipse(QPoint(0,0),1,1);//在(0,0)画一个100圆
    paint.drawEllipse(QPoint(0,0),50,50);//在(0,0)画一个100圆
    paint.drawEllipse(QPoint(0,0),100,100);//在(0,0)画一个100圆
    paint.drawEllipse(QPoint(0,0),150,150);//在(0,0)画一个100圆
    paint.drawEllipse(QPoint(0,0),200,200);//在(0,0)画一个100圆
    paint.drawEllipse(QPoint(0,0),250,250);//在(0,0)画一个100圆
    
    
    /*画横线*/
    paint.drawLine(0,-250,0,250);
    paint.drawLine(-250,0,250,0);
    
    /*锥形渐变*/
    QConicalGradient conicalGradient(0, 0, -startAngle);
    conicalGradient.setColorAt(0,QColor(0,255,0,200));
    conicalGradient.setColorAt(0.1,QColor(0,255,0,100));
    conicalGradient.setColorAt(0.2,QColor(0,255,0,0));
    conicalGradient.setColorAt(1,QColor(0,255,0,0));
    paint.setBrush(conicalGradient);
    paint.setPen(Qt::NoPen);
    
    /*画扇形*/
    QRect Rect_Pie(-250,-250,500,500);
    paint.drawPie(Rect_Pie,-startAngle*16,120*16);
    
    
}
相关推荐
LONGZETECH7 小时前
新能源汽车动力系统仿真硬核拆解:五系统分层架构的设计逻辑与技术权衡
c语言·开发语言·架构·汽车·汽车仿真教学软件·汽车教学软件
醉城夜风~7 小时前
C++模板详解:从基础到高级全面解析
java·开发语言·c++
地球驾驶员7 小时前
NX二次开发C#-获取体的外表面
开发语言·c#
誰能久伴不乏8 小时前
深入理解 C++ 多态:对象模型与底层机制解析
开发语言·c++·架构
Wang's Blog8 小时前
Go-Zero项目开发30: 微服务配置中心的设计与实现
开发语言·微服务·golang·go-zero
HH‘HH8 小时前
前端应用的离线暂停更新策略:原理、实现与最佳实践
开发语言·前端·php
我命由我123458 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
蜡台8 小时前
JS 浏览器 / App WebView 检测工具
开发语言·javascript·ecmascript
程序喵大人8 小时前
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置
开发语言·c++·list
qq_366086228 小时前
关于接口路径中中文值解码问题
java·开发语言·数据库