• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: Qt  雷达  余晖  绘制  

资源简介

使用Qt绘制雷达表盘,并可以显示目标、余晖、同心圆、十字架等元素。

资源截图

代码片段和文件信息

#include “SkyplotWidget.h“
#include 
#include 
#include 
#include 
#include 
#include 

SkyplotWidget::SkyplotWidget(QWidget *parent)
    : QWidget(parent)
     flash( false )
     p_marginScale( 0.78 )
     p_satScale( 0.03 )
     p_fontScale( 0.02 )
     p_gridColor( QColor( 150 150 150 255 ) )
     p_gridTextColor( QColor( 210 210210))
     p_gridWidth( 3 )
     p_ellipses( 3 )
     p_crosses( 3 )
     p_textMargin( 10 )
     p_flashIntervall( 500 )
     p_withGridLabels( true )
     p_antialiased( true )
     m_pieRotate(0)
{
    flashTimer.setInterval( p_flashIntervall );
    connect( &flashTimer SIGNAL( timeout() ) this SLOT( change_flash() ) );
    flashTimer.start( p_flashIntervall );
    connect(&m_PieSpeedSIGNAL(timeout())thisSLOT(pie_speed()));
    m_PieSpeed.start(50);
}

void SkyplotWidget::change_flash( void )
{
    flash = !flash;
    this->update();
}
void SkyplotWidget::pie_speed( void )
{
    m_pieRotate -= 10;
    this->update();
}

void SkyplotWidget::paintEvent(QPaintEvent *)
{
    QSize          widgetSize(this->size());
    QPalette       p = palette();
    QPainter      *painter = new QPainter(this);
    float          topMargin ;
    float          leftMargin;
    float          size;
    float          satelliteSize;
    float          fontSize;
    float          availableWidth    = widgetSize.width ();
    float          availableHeight   = widgetSize.height();

    if( availableHeight > availableWidth )
    {
        size = widgetSize.width() * p_marginScale;
        topMargin   = ( widgetSize.width() - widgetSize.width() * p_marginScale + widgetSize.height() - widgetSize.width() ) / 2.0;
        leftMargin  = ( widgetSize.width() - widgetSize.width() * p_marginScale ) / 2.0;
    }
    else
    {
        size = widgetSize.height() * p_marginScale;
        leftMargin = ( widgetSize.height() - widgetSize.height() * p_marginScale + widgetSize.width() - widgetSize.height()) / 2.0;
        topMargin  = ( widgetSize.height() - widgetSize.height() * p_marginScale ) / 2.0;
    }

    satelliteSize = size * p_satScale;
    painter->setRenderHint(QPainter::Antialiasing p_antialiased);
    painter->translate( leftMargin topMargin );  //重新设置坐标原点
    fontSize = size * p_fontScale;
    painter->setFont(QFont( “Arial“ static_cast< int >(fontSize)));

    //圆圈
    for(int i=0; i <= p_ellipses; i++)
    {
        float radius = size / 2.0 - i * ( size / ( 2.0  * p_ellipses ));
        painter->setPen( QPen( p_gridColor p_gridWidth ) );
        painter->drawEllipse(QPoint( size/2.0 size/2.0 ) static_cast< int >( radius ) static_cast< int >(radius));
        if(p_withGridLabels)
        {
            painter->setPen( QPen( p_gridTextColor p_gridWidth -2.5 ) );
            double tmp = ((p_ellipses - i) * (mMonitorScope / p_ellipses));
            QString distance = QString::number(((p_ellipses - i) * (mMonitorScope / p_ellipses)) 10  2);
      

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       14453  2019-02-27 14:09  SkyplotWidget.cpp
     文件        8037  2019-01-19 11:06  SkyplotWidget.h

评论

共有 条评论