Qt實現櫻花飛舞效果
阿新 • • 發佈:2020-07-21
本文例項為大家分享了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); } }
效果如下圖所示:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。