qt实现类似windows的屏幕保护(小球碰撞动画)
Published on 2023-02-05 12:10 in 分类: Qt with 萧海~
分类: Qt

qt实现类似windows的屏幕保护(小球碰撞动画)

    最近看了篇文章啊,讲的就是让小球进行移动,可能别人做的是仿真啊,用到了太多的数学函数,什么运动学,各种的,我就想着,自己能不能使用qt实现下这种效果,就是有一个球不停的移动,当碰到边框的时候就进行反方向移动。原理很简单,首先不停的重绘球体位置,其他就是计算的问题了。
    直接看代码吧!
    .h

    #ifndef WIDGET_H
    #define WIDGET_H
    #include <QWidget>
    #include <qpainter.h>
    #include <QTime>
    class Widget : public QWidget
    {
    Q_OBJECT
    public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    protected:
    void paintEvent(QPaintEvent *event);
    protected slots:
    void on_timer_timeout();
    private:
    QTimer *m_time;
    int m_X=10;
    int m_Y=10;
    bool m_bColl=false;
    bool m_bYcoll=false;
    };
    #endif // WIDGET_H

    .cpp

    #include "widget.h"
    #include <QTimer>
    #include <qdebug.h>
    Widget::Widget(QWidget *parent)
    : QWidget(parent)
    {
    this->resize(800,500);
    m_time=new QTimer(this);
    m_time->stop();
    m_time->setInterval (10) ;//设置定时周期,单位:毫秒
    m_time->start();
    connect(m_time,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));
    }
    Widget::~Widget()
    {
    }
    void Widget::paintEvent(QPaintEvent *event)
    {
    QPainter paint(this);
    paint.setRenderHint(QPainter::Antialiasing, true);
    paint.setPen(QColor("red"));
    paint.setBrush(QBrush(QColor("green")));
    if(m_bColl==false)
    {
    m_X=m_X+1;
    if(m_bYcoll==false)
    {
    m_Y=m_Y+1;
    paint.drawEllipse(m_X,m_Y,50,50);
    }
    else
    {
    m_Y=m_Y-1;
    paint.drawEllipse(m_X,m_Y,50,50);
    }
    }
    else
    {
    m_X=m_X-1;
    if(m_bYcoll==false)
    {
    m_Y=m_Y+1;
    paint.drawEllipse(m_X,m_Y,50,50);
    }
    else
    {
    m_Y=m_Y-1;
    paint.drawEllipse(m_X,m_Y,50,50);
    }
    }
    }
    void Widget::on_timer_timeout()
    {
    if(m_X+50>=this->width())
    {
    m_bColl=true; //反方向走
    }
    if(m_X<=0)
    {
    m_bColl=false;
    }
    if(m_Y+50>=this->height())
    {
    m_bYcoll=true;
    }
    if(m_Y<=0)
    {
    m_bYcoll=false;
    }
    update();
    }

    效果图:
    在这里插入图片描述

    转:https://blog.csdn.net/weixin_43676892/article/details/114140936?spm=1001.2014.3001.5502

    posted @   萧海~  阅读(145)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    历史上的今天:
    2021-02-05 Qt QComboBox 自动查找匹配项功能实现
    2021-02-05 Qt QComboBox+QCompleter实现搜索自动匹配
    2021-02-05 Qt QLineEdit、QCombox、QCompleter 实现模糊搜索
    2021-02-05 Windows CMD命令大全
    2021-02-05 Excel后缀.xls和.xlsx有什么区别
    2021-02-05 C++11用两个线程轮流打印整数
    2021-02-05 Qt 3D入门(二)
    点击右上角即可分享
    微信分享提示
    电磁波切换