1. 程式人生 > 程式設計 >Qt實現櫻花飛舞效果

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],200,60));
  ani->setEndValue(QRect(rnds[2*i+1],this->height()-50,60));
  animations.append(ani);
 }
}

效果如下圖所示:

Qt實現櫻花飛舞效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。