• 7817阅读
  • 5回复

QT4中关于背景图片滚动显示的问题? [复制链接]

上一主题 下一主题
离线旺旺
 
只看楼主 倒序阅读 楼主  发表于: 2009-09-09
     本人学QT的时间不长,最近在写一个程序,想实现背景图片滚动显示的效果。就像飞机游戏一样,背景一直都呈现出向后移动的现象。
如果想达到这样的效果,应该怎么去实现??
离线geliting

只看该作者 1楼 发表于: 2009-09-22
我也想知道哦
离线wczt_123
只看该作者 2楼 发表于: 2009-09-24
想法不错,谁知道怎么实现..
离线geliting

只看该作者 3楼 发表于: 2009-09-27
哎 。。。。。。。。。。。。。。。。。。。。。。
离线tieqilin
只看该作者 4楼 发表于: 2009-10-01
想法不错,谁知道怎么实现
离线kean
只看该作者 5楼 发表于: 2009-11-04
网上有的是
#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();

}
快速回复
限100 字节
 
上一个 下一个