网上有的是
#include <QTimer>
#include <QImage>
#include <QPainter>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>
#include "widget.h"
//#include "butterfly.h"
static QImage img(":/images/set_background600x400.png");
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QString str;
str=":/images/set_background600x400.png";
imgList.append(str);
str=":/images/set_background600x400_1.png";
imgList.append(str);
str=":/images/set_background600x400_2.png";
imgList.append(str);
imgPos=0;
QSize size=img.size();
resize(size);
startpos = 1;
starty=50;
startx=size.width()-20;
resultImage = QImage(size, QImage::Format_ARGB32_Premultiplied);
bgImage=QImage(size,QImage::Format_ARGB32_Premultiplied);
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timedone()));
timer->setInterval(100);
timer->start();
composeImage();
// QGraphicsScene *Scene = new QGraphicsScene;
// Scene->setSceneRect(-800,-800,800,800);
// Scene->setItemIndexMethod(QGraphicsScene::NoIndex);
//
// butterfly = new Butterfly();
// butterfly->setPos(-50,50);
// Scene->addItem(butterfly);
//
// QGraphicsView *View = new QGraphicsView(this);
// View->setScene(Scene);
// View->raise();
//View.setRenderHint(QPainter::Antialiasing);
//View.setBackgroundBrush(QPixmap("img"));
}
Widget::~Widget()
{
}
void Widget::composeImage()
{
//get bgImage
QPainter p(&bgImage);
p.save();
p.drawImage(0,0,img,startpos,0,img.width()-startpos,img.height());
p.drawImage(img.width()-startpos,0,img,0,0,startpos,img.height());
p.restore();
//get butterflyImage
static int speed=0;
speed++;
if(speed<3)
{
butterflyImage.load(":/images/butterfly1.PNG");
}
else if(speed<6)
{
speed=0;
butterflyImage.load(":/images/butterfly2.PNG");
}
startx-=4;
if(startx<10)
startx=this->size().width()-20;
static bool down=false;
if(starty>500)
{
down=true;
}
else
{
starty=50;
down=false;
}
if(down)
{
starty-=40;
}
else
{
starty+=40;
}
//compose bgImage and butterflyImage to resultImage
QPainter::CompositionMode mode = QPainter::CompositionMode_SourceOver;
QPainter painter(&resultImage);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.fillRect(resultImage.rect(), Qt::transparent);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.drawImage(0, 0, bgImage);
painter.setCompositionMode(mode);
painter.drawImage(startx,starty, butterflyImage);
painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
painter.fillRect(resultImage.rect(), Qt::white);
painter.end();
}
void Widget::timedone()
{
startpos += 2;
if( startpos>img.width())
{
startpos = 1;
imgPos++;
img.load(imgList.at(imgPos));
if(imgPos>=imgList.size()-1)
imgPos=-1;
}
composeImage();
update();
}
void Widget::paintEvent( QPaintEvent *e )
{
QPainter p(this);
p.save();
p.drawImage(0,0,resultImage);
p.restore();
}