在用Qt做一些客户端时,经常需要实现循环播放一组图文,实现一些广告、步骤引导等效果;
而直接切换又比较生硬,需要加上一些常用的效果,比如淡入淡出效果、平移效果(移入移出)等等;
可以使用QMovie与QGraphicsOpacityEffect与定时器QTimer可以实现这样的效果,可以按你所需,自由实现这些效果;
这里给出一个例子,主要实现了淡入淡出效果与平移效果(上下左右自由组合):
#ifndef SWITCHPICTURE_H
#define SWITCHPICTURE_H
#include <QTimer>
#include <QWidget>
#include <QGraphicsOpacityEffect>
#include <QLabel>
#include <QMovie>
enum CTRLTYPE//控件类型,图片与文字
{
TEXT,
IMAGE
};
enum MOVEWAY//平移类型
{
NONE,
LEFTTORIGHT,
RIGHTTOLEFT,
UPTODOWN,
DOWNTOUP
};
class SwitchPicture : public QWidget
{
Q_OBJECT
public:
explicit SwitchPicture(CTRLTYPE CtrlType = TEXT, QTimer *tm_switch = NULL, QWidget *parent = 0);
public:
QTimer *tm_switch;//示意图文切换定时器
CTRLTYPE CtrlType;
public:
QLabel *lb_picture;//示意图
QMovie *mv_media;//多媒体播放
long switchmsec;//示意图切换定时器切换间隔(毫秒数)
long staymsec;//示意图停留时间(毫秒数)
QGraphicsOpacityEffect *pictureeffect;//示意图透明度样式
double opacity;//透明度值
double opacityinterval;//淡入淡出透明度变化间隔
long switchcase;//淡入淡出中间状态标志
long switchturn;//示意图标号
long pageindex;//页面序号{0,1,2...}
QList<QList<QString>> pictureresourceslist;//示意图与文字说明容器
MOVEWAY movein;
MOVEWAY moveout;
public:
//*初始化与切换*//
void initPage(long pageindex);//初始化页面:停止计时器,初始化示意图与文字提示,然后初始化画面效果
void initOpacityWithTimer();//初始化画面效果,并打开计时器开启切换效果
void switchToNext(long nextturn);//切换到对应图片或文字
void setPictureOpacity();//设置透明度与位移效果
//*设置切换效果参数*//
void setOpacityInterval(double opacityinterval = 0.05);//设置透明度渐变粒度
void setSwitchMsec(long switchmsec = 30, long staymsec =