欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Qt繪制雷達(dá)掃描效果

 更新時間:2023年04月04日 09:28:56   作者:Keep apart  
這篇文章主要為大家詳細(xì)介紹了如何利用Qt繪制簡單的雷達(dá)掃描效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下

話不多說直接上代碼,代碼規(guī)范性可能差了點,但是效果得以實現(xiàn),在這里記錄一下。

scan.h的代碼如下

#ifndef SCAN_H
#define SCAN_H

#include <QWidget>
#include <QPainter>
#include <QTime>
#include <QTimer>
#include <QDebug>
#include <QPoint>
#include <QtMath>

namespace Ui {
class Scan;
}
class Scan : public QWidget
{
    Q_OBJECT
public:
    explicit Scan(QWidget *parent = nullptr);
    ~Scan();
public slots:
   void timerTimeOut();
protected:
   void paintEvent(QPaintEvent *event) override;
private slots:
   void on_pushButton_clicked();
private:
    Ui::Scan *ui;
};
#endif // SCAN_H

scan.cpp的代碼如下

#include "scan.h"
#include "ui_scan.h"
QTimer *timer = new QTimer();
int m_angle=0;
int alpha=0;
double cir_size=5;
Scan::Scan(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Scan)
{
    ui->setupUi(this);
    setPalette(Qt::black); setAutoFillBackground(true);//強(qiáng)制設(shè)置背景顏色為黑色
    connect(timer,SIGNAL(timeout()),this,SLOT(timerTimeOut()));//用槽函數(shù)控制雷達(dá)掃描效果。
    timer->start(10);


}

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

void Scan::timerTimeOut()
{
    timer->start(10);
    if(m_angle<-360){
        m_angle=0;
    }//實現(xiàn)無縫連接,且保證m_angle的值不會溢出
    if(alpha>=255){
        alpha = 0;
    }
    if(cir_size>10){
        cir_size=5;
    }
    update();
}
void Scan::paintEvent(QPaintEvent *event)//此函數(shù)自動執(zhí)行,實現(xiàn)掃描動畫效果
{
    Q_UNUSED(event);
    QPainter painter(this);
    QPen pen;
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(QPen(qRgba(128, 255, 0,250)));

    //網(wǎng)格改成坐標(biāo)系
    int x=280;//原本為240,右移40,下移60
    int y=300;
    /** 直徑按照480處理 每隔40px畫一個圓 繪制雷達(dá)圖**/
    QPoint center(x,y);
    painter.drawEllipse(center,240,240);
    painter.drawEllipse(center,240-48,240-48);
    painter.drawEllipse(center,240-96,240-96);
    painter.drawEllipse(center,240-144,240-144);
    painter.drawEllipse(center,240-192,240-192);
    /** 畫外圈刻度值,將坐標(biāo)系移動到圓心 **/
    painter.translate(x,y);
    painter.setPen(QPen(qRgba(255, 255, 0,250)));
    painter.setFont(QFont("Calibri",10));
    for(int i=1;i<=360;i++){
           painter.rotate(1);
           painter.drawLine(0,-240,0,-235);
    }
    for(int i=1;i<=72;i++){
        painter.rotate(5);
        painter.drawLine(0,-240,0,-232);
    }
    for(int i=1;i<=36;i++){
        painter.setRenderHint(QPainter::Antialiasing);
        painter.rotate(10);
        painter.drawLine(0,-240,0,-228);
    }
    for(int i=1;i<=4;i++){
        painter.rotate(90);
        painter.drawLine(0,-240,0,-168);
    }
    painter.translate(-x,-y);//恢復(fù)坐標(biāo)系
   /** 繪制掃描效果 **/
    QConicalGradient gradient(x, y, m_angle + 360);
    gradient.setColorAt(0.1, QColor(128, 255, 0, 150));
    gradient.setColorAt(0.7, QColor(0, 255, 0, 0));//尾部
    painter.setBrush(gradient);
    painter.setPen(QPen(Qt::NoPen));//去掉外框線
    if (width() > height()){
        painter.drawPie(40, 60, 480, 480, m_angle * 16, 360 * 16);
    }
    else{ painter.drawPie(40, 60, 480, 480, m_angle * 16, 360 * 16);}
    
    m_angle -= 1;//每次旋轉(zhuǎn)1度
    alpha +=2;
    cir_size+=0.01;

    //模擬畫出可疑點
    painter.setBrush(QBrush(QColor(50, 255, 200,alpha)));
    painter.drawEllipse(0,0,15,15);
    painter.drawEllipse(60+120,60+161,cir_size,cir_size);
    painter.drawEllipse(60+240,60+161,cir_size,cir_size);
    painter.drawEllipse(60+300,60+300,cir_size,cir_size);
    painter.setBrush(QBrush(QColor(50, 255, 200,(alpha+50)%255)));
    painter.drawEllipse(60+160,60+121,cir_size,cir_size);
    painter.drawEllipse(60+60,60+191,cir_size,cir_size);
    painter.drawEllipse(60+260,60+221,cir_size,cir_size);
    painter.setBrush(QBrush(QColor(50, 255, 200,(alpha+100)%255)));
    painter.drawEllipse(60+210,60+181,cir_size,cir_size);
    painter.drawEllipse(60+10,60+281,cir_size,cir_size);
    painter.drawEllipse(60+100,60+81,cir_size,cir_size);
 

}




void Scan::on_pushButton_clicked()
{
    m_angle=0;//將掃描動畫重置并刷新數(shù)據(jù),后面要將數(shù)據(jù)刷新的函數(shù)寫在下面。
}

效果圖,雷達(dá)右上角的圖標(biāo)對應(yīng)著on_pushButton的點擊事件

到此這篇關(guān)于利用Qt繪制雷達(dá)掃描效果的文章就介紹到這了,更多相關(guān)Qt雷達(dá)掃描內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++詳解如何通過模板實現(xiàn)元素的反序

    C++詳解如何通過模板實現(xiàn)元素的反序

    這篇文章主要介紹了C++中模板(Template)實現(xiàn)元素的反序,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C++分析講解類的靜態(tài)成員變量是什么

    C++分析講解類的靜態(tài)成員變量是什么

    在C++中,靜態(tài)成員是屬于整個類的而不是某個對象,靜態(tài)成員變量只存儲一份供所有對象共用。所以在所有對象中都可以共享它。使用靜態(tài)成員變量實現(xiàn)多個對象之間的數(shù)據(jù)共享不會破壞隱藏的原則,保證了安全性還可以節(jié)省內(nèi)存
    2022-04-04
  • C++鏈表類的封裝詳情介紹

    C++鏈表類的封裝詳情介紹

    這篇文章主要介紹了C++鏈表類的封裝,文章基于C++的相關(guān)資料展開主題的詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 一文詳解C++中隱含的this指針

    一文詳解C++中隱含的this指針

    這篇文章主要帶大家詳細(xì)了解一下C++中隱含的this指針,文中通過代碼示例和圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 基于C語言實現(xiàn)圖書管理信息系統(tǒng)設(shè)計

    基于C語言實現(xiàn)圖書管理信息系統(tǒng)設(shè)計

    這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)圖書管理信息系統(tǒng)設(shè)計與實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言指針基礎(chǔ)詳解

    C語言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語言指針的基礎(chǔ),主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • C++?STL?中的數(shù)值算法示例講解

    C++?STL?中的數(shù)值算法示例講解

    本片文章講解了C++STL?中的數(shù)值算法,包含iota、accumulate、adjacent_difference、inner_product、partial_sum這些方法的使用,感興趣的朋友來看看吧<BR>
    2022-04-04
  • C語言實現(xiàn)C++繼承和多態(tài)的代碼分享

    C語言實現(xiàn)C++繼承和多態(tài)的代碼分享

    本文主要給大家簡單講訴了C和C++的區(qū)別以及如何使用C語言模擬實現(xiàn)C++繼承和多態(tài),并附上示例代碼,是篇相當(dāng)不錯的文章,推薦給喜歡C語言的小伙伴們
    2017-07-07
  • 實現(xiàn)posix消息隊列示例分享

    實現(xiàn)posix消息隊列示例分享

    這篇文章主要介紹了實現(xiàn)posix消息隊列示例,學(xué)習(xí)記錄鎖,線程互斥量,線程條件變量,內(nèi)存映射,信號,線程的綜合應(yīng)用,需要的朋友可以參考下
    2014-02-02
  • 探究c++虛表實現(xiàn)代碼

    探究c++虛表實現(xiàn)代碼

    虛表是一種利用程序語言實現(xiàn)的dynamic dispatch機(jī)制,或者說runtime method binding機(jī)制,也就是我們說的多態(tài)。本文簡單探究虛表實現(xiàn)方法,一起看看吧
    2021-09-09

最新評論