Qt實(shí)現(xiàn)櫻花飛舞效果
本文實(shí)例為大家分享了Qt實(shí)現(xiàn)櫻花飛舞效果的具體代碼,供大家參考,具體內(nèi)容如下
應(yīng)女友要求,使用Qt做了一個(gè)在電腦桌面櫻花飛舞的小程序。這里面用到了Qt動(dòng)畫(huà)效果QPropertyAnimation類來(lái)控制飛舞效果。使用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()); //去除窗體標(biāo)題
this->resize(qApp->desktop()->availableGeometry().size());
this->setAttribute(Qt::WA_TranslucentBackground, true); //設(shè)置背景透明
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);
}
//批量創(chuàng)建櫻花標(biāo)簽
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);
}
}
//批量創(chuàng)建櫻花動(dòng)畫(huà)
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); //無(wú)限循環(huán)
ani->setStartValue(QRect(rnds[i*2],0,200,60));
ani->setEndValue(QRect(rnds[2*i+1],this->height()-50,200,60));
animations.append(ani);
}
}
效果如下圖所示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
QT編寫(xiě)地圖實(shí)現(xiàn)在線輪廓圖的示例代碼
輪廓圖也叫行政區(qū)劃,這里的輪廓圖是指百度地圖的區(qū)域輪廓圖。本文將為大家介紹QT如何實(shí)現(xiàn)在線輪廓圖的編寫(xiě),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
VS2022創(chuàng)建Windows服務(wù)程序的方法步驟
本文主要介紹了VS2022創(chuàng)建Windows服務(wù)程序的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
C語(yǔ)言實(shí)現(xiàn)輸入一顆二元查找樹(shù)并將該樹(shù)轉(zhuǎn)換為它的鏡像
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入一顆二元查找樹(shù)并將該樹(shù)轉(zhuǎn)換為它的鏡像,是數(shù)據(jù)結(jié)構(gòu)中二元查找樹(shù)的一個(gè)比較經(jīng)典的算法,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下2014-09-09
Cocos2d-x UI開(kāi)發(fā)之CCControlSlider控件類使用實(shí)例
這篇文章主要介紹了Cocos2d-x UI開(kāi)發(fā)之CCControlSlider控件類使用實(shí)例,本文代碼中包含大量注釋講解了CCControlSlider控件類的使用,需要的朋友可以參考下2014-09-09

