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
分类:
Qt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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入门(二)