QT--雷达显示自定义

该文章介绍了如何利用Qt的QPainter和QConicalGradient类创建雷达扫描效果。通过重写paintEvent函数,结合QConicalGradient的圆形渐变色,实现雷达图形的绘制。然后使用QTimer类创建一个自动刷新的定时器,以模拟雷达动态扫描的效果。最后,将这些功能封装到一个类中,以便在实际项目中应用。
摘要由CSDN通过智能技术生成

Qt之显示雷达效果自定义:

1、QPainter:

自定义显示雷达的基础是Qt自带的绘图画笔QPainter,通过重写paintEvent函数,在重写的paintEvent函数里使用画笔QPainter就能够实现在qt内自定义绘图。

2、QConicalGradient:

其次在Qt内进行雷达自定义显示需要用到QConicalGradient类,运用QConicalGradient类能够达到圆形渐变颜色的效果,即能够达到雷达显示的效果。

void Scan::radarShow(QPainter *painter)
{
    /** 绘制雷达图 **/
    /** 绘制扫描效果 **/
    QConicalGradient gradient(center.x(), center.y(), s_angle + 360);
    gradient.setColorAt(0.1, lineColor);
    gradient.setColorAt(0.6, QColor(0, 255, 0, 0));
    painter->setBrush(gradient);
    painter->setPen(QPen(Qt::NoPen));//去掉外框线
    //center--雷达中心点;radius--雷达探测半径; s_angle--雷达探测起始角度
    painter->drawPie(center.x() - radius/2, center.y() - radius/2, radius, radius, s_angle * 16, 360 * 16);
    s_angle -= span;//span--每次旋转的角度大小
}

3、动态扫描:

通过上诉方法能够实现雷达扫描的一个显示效果,但是想要让雷达在圆形内动起来还需要借用QTimer类,通过QTimer类实现一个自动刷新的定时器,定时器触发雷达实时扫描的效果。

Scan::Scan(QWidget *parent) :
    QWidget(parent)
{
    this->resize(parent->size());
    this->setAttribute(Qt::WA_TranslucentBackground);//强制设置背景颜色为透明
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());//强制设置窗口无边框
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(timerTimeOut()));//用槽函数控制雷达扫描效果。
 }
void Scan::timerTimeOut()
{
    timer->start(10);
    if(s_angle<-360){
        s_angle=0;
    }//防止s_angle的值不会溢出
    update();
}

4、封装类:

将重写的paintEvent方法和QTimer类封装在同一个类里面,最后通过实例化对象,实时调用对象中的方法就能够实现雷达的自定义显示啦!

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scan = new Scan(this);
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter(this);
    scan->radarShow(&painter);
}

5、效果展示

最终效果视频链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值