Qt实现图片渐进渐出效果

转载 2016年04月11日 10:58:11

http://blog.sina.com.cn/s/blog_75deeddd0100tu2s.html


图片渐进渐出效果
.h文件
#ifndef CHANGEPICTURE_H
#define CHANGEPICTURE_H
#include <QWidget>
#include <QtGui>
#include <QGraphicsEffect>
#include <QGraphicsView>
#include <QTimer>
class ChangePicture : public QGraphicsView
{
Q_OBJECT
public:
    ChangePicture(QStringList piclist,
                  QSize picSize,
                  QPoint picPoint,
                  int speed,
                  QWidget *parent = 0);
private:
    void setupScene();
    void createItems();
private slots:
    void setupEffect();
private:
    QStringList m_piclist;
    QSize m_picSize;
    QPoint m_picPoint;
    QTimer m_speed;
    qreal m_angle;
    QGraphicsScene m_scene;
    QGraphicsItem *m_dissolving;
    QTimer *m_speedTimer;
    QPixmap m_pixmap;
    int m_timerCounter;
    int m_picCount;
    int m_int_speed;
};
#endif // CHANGEPICTURE_H


.cpp文件
#include "changepicture.h"

ChangePicture::ChangePicture(QStringList piclist, QSize picSize, QPoint picPoint, int speed ,QWidget *parent) :
        QGraphicsView(parent),m_piclist(piclist),m_picSize(picSize),m_picPoint(picPoint),m_int_speed(speed),m_angle(0.0)
{
    this->setupScene();
    this->setupEffect();
    this->m_timerCounter = 0;
    this->m_picCount = 1;
    this->m_speedTimer = new QTimer(this);
    connect(this->m_speedTimer,SIGNAL(timeout()),this,SLOT(setupEffect()));
    this->m_speedTimer->start(m_int_speed);
}
void ChangePicture::setupScene()
{
    this->setScene(&this->m_scene);
    this->setRenderHint(QPainter::Antialiasing,true);
    this->setFrameStyle(QFrame::NoFrame);
    this->m_scene.setSceneRect(0,0,this->m_picSize.width(),this->m_picSize.height());
    this->createItems();
}
void ChangePicture::createItems()
{
    this->m_pixmap = QPixmap(m_piclist.at(0)).scaled(m_picSize);
    this->m_dissolving = this->m_scene.addPixmap(this->m_pixmap);
    this->m_dissolving->setPos(m_picPoint);
}
void ChangePicture::setupEffect()
{
    QGraphicsOpacityEffect *m_dissolvingEffect = new QGraphicsOpacityEffect(this);
    if(this->m_timerCounter != 100)
    {
        m_dissolvingEffect->setOpacity(this->m_timerCounter * 0.02);
        this->m_timerCounter++;
    }else
    {
        this->m_scene.clear();
        m_dissolvingEffect->setOpacity(m_angle);
        this->m_pixmap = QPixmap(m_piclist.at(m_picCount)).scaled(m_picSize);
        this->m_dissolving = this->m_scene.addPixmap(this->m_pixmap);
        this->m_dissolving->setPos(m_picPoint);
        this->m_timerCounter = 0;
        if(this->m_picCount >= this->m_piclist.size() - 1)
        {
            this->m_picCount = 0;
        }else
        {
            this->m_picCount++;
        }
    }
    this->m_dissolving->setGraphicsEffect(m_dissolvingEffect);
}


相关文章推荐

QT中实现图片淡出淡入的效果

网上关于图片的淡出淡入效果的讨论蛮多的,但是用QT实现就很少了。实现这种效果有两种途径:一是读取图片的RGB值,然后渐进达到淡出淡入的效果,这种方法我没有尝试,感觉还是比较复杂。二是设置加载图片载体的...

Qt实现移入移出与淡入淡出效果

在用Qt做一些客户端时,经常需要实现循环播放一组图文,实现一些广告、步骤引导等效果; 而直接切换又比较生硬,需要加上一些常用的效果,比如淡入淡出效果、平移效果(移入移出)等等; 可以使用QMovi...

A sample highlighting QGraphicsEffect

http://qt-project.org/wiki/Category:HowTo class HighlightEffect : public QGraphicsEffect { Q_OBJ...

Qt技巧:让Qt支持Win7的Aero和毛玻璃效果

Qt5增加了许多特性,其中 Qt Windows Extras 模块就增加了对Win7 Aero 效果的支持。 官网的介绍如下: Qt Windows Extras provide cla...

Qt实现areo毛玻璃效果的类,以及使用方法:

  以下是实现areo效果的类,以及使用方法:   ************************main.cpp****************************** #include #i...

Qt QWidget实现手势缩放和平移(二)

上一篇文章中讲到了QWidget实现手势缩放和平移,通过QGestureEvent来捕捉手势操作,但是这种方式不一定能通用,比如像教学用的电子白板上,是红外触控感应,并不能通过QGestureEven...

Qt中窗体控件按照比例缩放,自适应窗口大小进行布局

最近在做本科毕设,用到了Qt,无奈本人实在是太过于小白了,很多东西都进行了很久的探索,比如今天说到的窗体控件布局...一把辛酸泪     首先就是创建一个GUI文件,然后进行UI设计,这里就只需要从左...

qt程序实现多个图片连续显示效果像动画一样

qt学习也快一个月了,最近想做一个有趣的程序。效果是这样的:通过定时器连续显示几幅图片,串联起来看像是动的一样,我在网上找了几幅关于小鸡破壳而出那个有趣的场景,然后通过程序实现效果就是小鸡破壳而出。 ...

Qt浅谈之二十六图片滑动效果

一、简介         博客中发现有作者写的仿360的代码,觉得其中图片滑动的效果很有意思,特提取其中的代码。 二、运行图        运行部分效果图(可以通过鼠标滑动或通过键盘方向键控制或...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt实现图片渐进渐出效果
举报原因:
原因补充:

(最多只允许输入30个字)