Qt实现樱花飞舞效果

 更新时间:2020年07月21日 09:34:37   作者:cfqcfqcfqcfqcfq  
这篇文章主要为大家详细介绍了Qt实现樱花飞舞效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Qt实现樱花飞舞效果的具体代码,供大家参考,具体内容如下

应女友要求,使用Qt做了一个在电脑桌面樱花飞舞的小程序。这里面用到了Qt动画效果QPropertyAnimation类来控制飞舞效果。使用label加载樱花图案。大概的核心代码如下:

Widget::Widget(QWidget *parent) :
 QWidget(parent),
 timer(new QTimer(this)),
 pixmap(new QPixmap(":/cherry.png")),
 ui(new Ui::Widget)
{
 ui->setupUi(this);
 setWindowFlags(Qt::FramelessWindowHint | windowFlags()); //去除窗体标题
 this->resize(qApp->desktop()->availableGeometry().size());
 this->setAttribute(Qt::WA_TranslucentBackground, true); //设置背景透明
 this->setAutoFillBackground(true);
 this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint); //窗口总在最顶层
 
 
 connect(timer,SIGNAL(timeout()),this,SLOT(start()));
 
 QPixmap *pixmap = new QPixmap(":/cherry.png");
 pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
 pixmaps.append(pixmap);
 pixmap = new QPixmap(":/cherry2.png");
 pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
 pixmaps.append(pixmap);
 pixmap = new QPixmap(":/cherry3.png");
 pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
 pixmaps.append(pixmap);
 pixmap = new QPixmap(":/cherry4.png");
 pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
 pixmaps.append(pixmap);
 pixmap = new QPixmap(":/cherry5.png");
 pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
 pixmaps.append(pixmap);
 
 creatLabels();
 createAnimation();
 timer->start(1000);
}
 
//批量创建樱花标签
void Widget::creatLabels()
{
 for(int i = 0; i < cherryNums;i++)
 {
  QLabel *label = new QLabel(this);
  label->setScaledContents(true);
  label->setPixmap(*pixmaps[i%pixmaps.size()]);
  label->setAttribute(Qt::WA_TranslucentBackground, true);
  label->resize(0,0);
  labs.append(label);
 }
}
 
//批量创建樱花动画
void Widget::createAnimation()
{
 if(labs.empty())
  return;
 
 QVector<int> rnds = generateRandomNumber(labs.size()*2);
 for(int i = 0;i < labs.size();i++)
 {
  QPropertyAnimation *ani = new QPropertyAnimation(this);
  ani->setTargetObject(labs[i]);
  ani->setPropertyName("geometry");
  ani->setDuration(10000);
  ani->setLoopCount(-1); //无限循环
  ani->setStartValue(QRect(rnds[i*2],0,200,60));
  ani->setEndValue(QRect(rnds[2*i+1],this->height()-50,200,60));
  animations.append(ani);
 }
}

效果如下图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • C++继承模式详解

    C++继承模式详解

    继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的特性基础上进行扩展,增加功能,这样产生新的类,称作是派生类。继承呈现了面向对象程序设计的层析结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。
    2021-12-12
  • C++实现希尔排序(ShellSort)

    C++实现希尔排序(ShellSort)

    这篇文章主要为大家详细介绍了C++实现希尔排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言的基本语法详解

    C语言的基本语法详解

    本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助
    2021-09-09
  • 解析Linux下C++编译和链接

    解析Linux下C++编译和链接

    编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理。本文通过开发过程中碰到的四个典型问题来探索64位linux下C++编译&链接的那些事。
    2021-05-05
  • C语言实现SM4加解密方式

    C语言实现SM4加解密方式

    这篇文章主要介绍了C语言实现SM4加解密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • C语言结构体指针案例解析

    C语言结构体指针案例解析

    这篇文章主要介绍了C语言结构体指针案例解析,本文通过例子来解释说明了C语言的结构体概念和如何用指针去操作结构体,文章标明了详细的代码,需要的朋友可以参考下
    2021-07-07
  • C语言动态内存分配函数的实现

    C语言动态内存分配函数的实现

    这篇文章主要介绍了C语言动态内存分配函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • C语言超详细讲解getchar函数的使用

    C语言超详细讲解getchar函数的使用

    C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数,下面让我们详细来看看
    2022-05-05
  • Unity编辑器下重启的方法

    Unity编辑器下重启的方法

    这篇文章主要介绍了Unity编辑器下重启的方法的相关资料,希望通过本文能帮助到大家,让大家学习理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • C++如何去除cpp文件的注释详解

    C++如何去除cpp文件的注释详解

    在日常工作中,我们会给c/c++代码写上一些注释,但是往往为了保持最终的代码尽可能小,我们需要删除注释,手动删除太缓慢了,下面这篇文章主要给大家介绍了关于C++如何去除cpp文件注释的相关资料,需要的朋友可以参考下
    2022-09-09

最新评论