首页 > 系统相关 >qt实现类似windows的屏幕保护(小球碰撞动画)

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

时间:2023-02-05 12:22:56浏览次数:66  
标签:Widget false qt windows 小球 50 paint time include

最近看了篇文章啊,讲的就是让小球进行移动,可能别人做的是仿真啊,用到了太多的数学函数,什么运动学,各种的,我就想着,自己能不能使用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

标签:Widget,false,qt,windows,小球,50,paint,time,include
From: https://www.cnblogs.com/xiaohai123/p/17093153.html

相关文章

  • 解决VS2019编译Qt报错:C3615 constexpr 函数“qCountLeadingZeroBits”不能生成常量表
    这个是Qt的BUG,要解决编译报错的问题,需要修改Qt安装目录下的一个文件:Qt\Qt5.9.5\5.9.5\msvc2015\include\QtCore\qalgorithms.h建议修改之前先保存一个副本,另外要根据编译......
  • windows右键菜单扩展容器[开源]
    今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下:image如上图,右键菜单多了几个我自定义的菜单复制文件路径复制文件夹路......
  • 如何重装Windows系统——以Windows10为例
    写在重装前重装前注意备份系统盘(一般是C盘)中的数据你需要一个U盘可以把操作系统看做成一个软件软件运行的时候无法删除软件一般情况下系统盘是C盘步骤重装系统主......
  • windows下修改键位
    过程如下:搜索框输入cmd进入命令行输入regedit命令找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\KeyboardLayout]新建一个scancodemap的文件(右键新建......
  • Windows系统密钥(实测可用)
    WindowsServer2003R2sp2standardedition文件名:cn_win_srv_2003_r2_standard_with_sp2_cd1_X13-13927.iso链接:ed2k://|file|cn_win_srv_2003_r2_standard_with_sp2_......
  • PyQt5按钮点击信号clicked报错
    提问: 我把python文件包移动到了e盘,然后编辑器connect就报黄色了。重装了pythonpyqt5编辑器,现在编辑器没有黄色,但是:本机QT信号不可调用。用之前写的代码运行不报错,现在......
  • ubuntu中Qt5中文输入法不起作用的解决方案
    在ubuntu上使用qtCreate5.9.6,遇上了中文输入法无法输入的情况,这怎么能行,得解决这一个问题,写代码没有中文注释,怎么能行?开始行动:1、安装输入法sudoapt-getinstallfcit......
  • Qt中QSqlQueryModel对应的表格进行自动排序功能
    Qt中使用了自己的机制来避免使用SQL语句,为我们提供了更简单的数据库操作及数据显示模型,分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRela......
  • Qt6+OpenCV4人脸识别应用程序面部标志图(共计68点)
    我们可以看到,由索引号所代表的点在面部具有固定的位置,因此我们可以通过点的以下索引(包含下限,不含上限)来访问这些面部特征:mouth(嘴巴)[48,68]。righteyebrow(右眉)[17,22]。......
  • PyQt加载UI文件
    1.动态加载importsysfromPySide6importQtCore,QtWidgetsfromPySide6.QtWidgetsimport*fromPySide6.QtUiToolsimportQUiLoaderclassreadfile(QWidget):......