• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: 其他
  • 标签:       

资源简介

在Qt5中实现的雷达扫描效果,qt-5.5.1 下编译通过,下载此项目后,在qt5中的项目位置修改路径打开。仅提供一个模拟版本,后续使用可以自己开发。

资源截图

代码片段和文件信息

#include “cradar.h“
#include 
#include 
#include 
#include 
#include

CRadar::CRadar(QWidget *parent) : QWidget(parent)
{
    //初始化
    m_pieRotate = 0;
    m_timerId = -1;
    m_nSpeed = 50;
    m_points<    m_pointsAlapha<<100<<100<<100<<100<<100;

    //启动定时器
    m_timerId = startTimer(m_nSpeed);
    m_pointTimerId = startTimer(1200);
}

void CRadar::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    //抗锯齿
    painter.setRenderHint(QPainter::Antialiasing);

    //背景
    painter.fillRect(rect()QColor(100100200));

    //边长
    int len = m_drawArea.width();

    //底盘(x轴、y轴和3个圆)
    painter.setPen(QPen(Qt::white));
    painter.drawLine(m_drawArea.topLeft() + QPoint(0len/2)m_drawArea.topRight() + QPoint(0len/2));
    painter.drawLine(m_drawArea.topLeft() + QPoint(len/20)m_drawArea.bottomLeft() + QPoint(len/20));
    painter.drawEllipse(m_drawArea.center()len/2len/2);
    painter.drawEllipse(m_drawArea.center()len/3len/3);
    painter.drawEllipse(m_drawArea.center()len/6len/6);

    //转动部分
        //---//线
    qreal x = m_drawArea.center().x() + (qreal)len/2 * cos(-m_pieRotate*3.14159/180);
    qreal y = m_drawArea.center().y() + (qreal)len/2 * sin(-m_pieRotate*3.14159/180);
    painter.setPen(QPen(Qt::white));
    painter.drawLine(m_drawArea.center()QPointF(xy));

       //----//扇形
    QConicalGradient gradient;
    gradient.setCenter(m_drawArea.center());
    gradient.setAngle(m_pieRotate + 180); //渐变与旋转方向恰好相反,以扇形相反的边作为渐变角度。
    gradient.setColorAt(0.4QColor(255255255100)); //从渐变角度开始0.5 - 0.75为扇形区域,由于Int类型计算不精确,将范围扩大到0.4-0.8
    gradient.setColorAt(0.8QColor(2552552550));
    painter.setBrush(QBrush(gradient));
    painter.setPen(Qt::NoPen);
    painter.drawPie(m_drawAream_pieRotate*1690*16);

    //装饰-随机点
    for(int i = 0; i < m_points.count(); ++i)
    {
        int colorAlaph = m_pointsAlapha.at(i);
        painter.setPen(QPen(QColor(255255255colorAlaph)3));
        painter.drawPoint(m_points.at(i));
    }

    //更详细解释参考:http://fearlazy.com/index.php/post/31.html
}

void CRadar::resizeEvent(QResizeEvent *event)
{
    //以较短的边长作为绘制区域边长
    if(width() > height())
    {
        m_drawArea = QRect((width() - height())/20height()height());
    }
    else
    {
        m_drawArea = QRect(0(height() - width())/2width()width());
    }

    m_drawArea.adjust(1010-10-10);
}

void CRadar::timerEvent(QTimerEvent *event)
{
    if(m_timerId == event->timerId())
    {
        m_pieRotate -= 10;
        update();
    }
    else if(m_pointTimerId == event->timerId())
    {
        //随机更换装饰的点
        for(int i = 0; i < m_points.count(); ++i)
        {
            int offsetX = rand()%m_drawArea.width();
            int offsetY = rand()%m_drawArea.width();
            int alapha = rand()%255;
           

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3401  2018-09-17 20:30  CRadar\cradar.cpp

     文件        998  2018-09-17 20:21  CRadar\cradar.h

     文件        401  2018-09-17 19:52  CRadar\CRadar.pro

     文件      18700  2018-09-17 20:40  CRadar\CRadar.pro.user

     文件        175  2018-09-17 19:50  CRadar\main.cpp

     文件        250  2018-09-17 20:11  CRadar\widget.cpp

     文件        273  2018-09-17 20:14  CRadar\widget.h

     文件        441  2018-09-17 19:50  CRadar\widget.ui

     目录          0  2018-09-17 20:40  CRadar

----------- ---------  ---------- -----  ----

                24639                    9


评论

共有 条评论