您当前的位置: 首页 >  动画

txwtech

暂无认证

  • 4浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT使用QMovie播放Gif动画

txwtech 发布时间:2022-10-07 22:00:51 ,浏览量:4

QT使用QMovie播放Gif动画

QT使用QMovie播放Gif动画.rar-QT文档类资源-CSDN下载QT使用QMovie播放Gif动画.rarhttps://txwtech.blog.csdn.ne更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/txwtech/86739600?spm=1001.2014.3001.5503

一、QMovie简介 ​ QMovie类用于显示没有声音的简单动画。在实际运用中,可以用来显示Gif格式的动画。

​ 通过将文件名称或指向QIODevice的指针传递给QMovie的构造函数即可创建QMovie对象。QIODevice包含动画图像格式。在开始动画之前,可以调用isValid()来检查图像数据是否有效。调用start()来开始动画。此后QMovie将进入运行状态,并发出started()和stateChanged()信号。可以调用state()获取影片的当前状态。

​ 每当动画中有新的帧可以使用时,QMovie将发出updated()信号。如果帧的大小改变,则会触发resize()信号。可以调用currentImage()或currentPixmap()来获得当前帧的副本。当动画播放完成时,QMovie会发出finished()信号。如果在回放过程中出现任何错误(即图像文件损坏),QMovie将发出error()信号。

​ 可以通过调用setSpeed()来控制动画播放的速度,它以原始速度的百分比作为参数。通过调用setPaused(true)来暂停电影。此后QMovie将进入暂停状态并发出stateChanged()信号。如果调用setPaused(false), QMovie将重新进入运行状态并再次开始动画。如果要停止电影,调用stop()。

​ 某些动画格式允许设置背景颜色。可以调用setBackgroundColor()来设置颜色,或者调用backgroundColor()来检索当前的背景颜色。

​ currentFrameNumber()返回当前帧的序列号。动画中的第一个帧的序列号是0。frameCount()返回动画中的帧总数,如果图像格式支持的话。可以调用loopCount()来获得影片在结束前应该循环的次数。nextFrameDelay()返回当前帧应该显示的毫秒数。 ​ QMovie可以通过调用setCacheMode()来缓存动画帧。

二、QMovie使用方法 (2-1)代码实例     QMovie *movie1 = new    QMovie(":/ProgressBar_3.gif");     ui->label->resize(666,309);     ui->label->setMovie(movie1); 1 2 3 ​ 注意:以上方法是通过QLabel进行gif动画加载的,所以需要设置QLabel的大小,这样才会显示完整的gif图片。

(2-2)缓存所有动画帧 ​ 如果需要进行gif动画帧的跳转、速度控制等操作,还需要使用setCacheMode来指明gif的加载方式。默认是不会缓存所有的gif动画帧的。所以需要设置为:

    movie1->setCacheMode(QMovie::CacheAll); 1 ​ 此后便可以使用jumpToFrame()跳转gif动画帧;使用frameCount()获取gif动画帧的总数;使用setSpeed()设置动画速度。  

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
class QMovie;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_horizontalSlider_valueChanged(int value);

    void on_pushButton_start_clicked();

    void on_pushButton_pause_toggled(bool checked);

    void on_pushButton_stop_clicked();

    void on_pushButton_capture_screen_clicked();

    void on_spinBox_valueChanged(int arg1);

private:
    Ui::MainWindow *ui;
    QMovie *movie2;
};
#endif // MAINWINDOW_H

cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->label->setAlignment(Qt::AlignCenter);
    ui->label->setBackgroundRole(QPalette::Dark);
    ui->label->setAutoFillBackground(true);
    movie2 = new QMovie(this);
   // movie2->setFileName("../mymovie/aa.gif");
    movie2->setFileName("../aa2.gif");
    //设置缓存模式
    movie2->setCacheMode(QMovie::CacheAll);
    //设置动画的大小为标签的大小
    QSize size2=ui->label->size();
    movie2->setScaledSize(size2);
    ui->label->setMovie(movie2);
    //设置水平滑块的最大最小值,当动画播放时自动更改滑块的值
    ui->horizontalSlider->setMinimum(0);
    ui->horizontalSlider->setMaximum(movie2->frameCount());
    connect(movie2,&QMovie::frameChanged,ui->horizontalSlider,&QSlider::setValue);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    //播放进度
    movie2->jumpToFrame(value);
}

void MainWindow::on_pushButton_start_clicked()
{
    //开始
    movie2->start();
}

void MainWindow::on_pushButton_pause_toggled(bool checked)
{
    //暂停
    movie2->setPaused(checked);
}

void MainWindow::on_pushButton_stop_clicked()
{
    //停止
    movie2->stop();
}

void MainWindow::on_pushButton_capture_screen_clicked()
{
    //截屏
    int id=movie2->currentFrameNumber();
    QPixmap pix=movie2->currentPixmap();
    pix.save(QString("../%1.png").arg(id));
}

void MainWindow::on_spinBox_valueChanged(int arg1)
{
    //spinbox 播放速度
    movie2->setSpeed(arg1);
}

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0389s