日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt: GIF图片播放器(QMovie类)

發布時間:2024/1/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt: GIF图片播放器(QMovie类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:

QMovie Class

The QMovie class is a convenience class for playing movies with QImageReader.?

Header:

#include <QMovie>

qmake:

QT += gui

Inherits:

QObject


QMovie類用來顯示簡單的并且沒有聲音的動畫,比如GIF格式的圖片等。

如果你想要顯示視頻或者多媒體,可以使用Qt Multimedia?多媒體框架。


顯示一個簡單的動畫,常用的方式如下:

QLabel label;QMovie *movie = new QMovie("animations/fire.gif");label.setMovie(movie);movie->start();

實例:

運行效果:



主要代碼:

(基類為QWidget)



1. movieplayer.h

/*movieplayer.h*/#ifndef MOVIEPLAYER_H #define MOVIEPLAYER_H#include <QCheckBox> #include <QGridLayout> #include <QHBoxLayout> #include <QLabel> #include <QMovie> #include <QSlider> #include <QSpinBox> #include <QToolButton> #include <QVBoxLayout>#include <QWidget>class QCheckBox; class QGridLayout; class QHBoxLayout; class QLabel; class QMovie; class QSlider; class QSpinBox; class QToolButton; class QVBoxLayout;class MoviePlayer : public QWidget {Q_OBJECTpublic:MoviePlayer(QWidget *parent = 0);void openFile(const QString &fileName);private slots:void open();void goToFrame(int frame);void fitToWindow();void updateButtons();void updateFrameSlider();private:void createControls();void createButtons();QString currentMovieDirectory;QLabel *movieLabel;QMovie *movie;QToolButton *openButton;QToolButton *playButton;QToolButton *pauseButton;QToolButton *stopButton;QToolButton *quitButton;QCheckBox *fitCheckBox;QSlider *frameSlider;QSpinBox *speedSpinBox;QLabel *frameLabel;QLabel *speedLabel;QGridLayout *controlsLayout;QHBoxLayout *buttonsLayout;QVBoxLayout *mainLayout; };#endif

2. movieplayer.cpp

/*movieplayer.cpp*/#include <QtGui> #include <QString> #include <QStyle> #include <QFileDialog>#include "movieplayer.h"MoviePlayer::MoviePlayer(QWidget *parent): QWidget(parent) {movie = new QMovie(this);movie->setCacheMode(QMovie::CacheAll);movieLabel = new QLabel(tr("No movie loaded"));movieLabel->setAlignment(Qt::AlignCenter);movieLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);movieLabel->setBackgroundRole(QPalette::Shadow);movieLabel->setAutoFillBackground(true);currentMovieDirectory = ".gif";createControls();createButtons();connect(movie, SIGNAL(frameChanged(int)), this, SLOT(updateFrameSlider()));connect(movie, SIGNAL(stateChanged(QMovie::MovieState)),this, SLOT(updateButtons()));connect(fitCheckBox, SIGNAL(clicked()), this, SLOT(fitToWindow()));connect(frameSlider, SIGNAL(valueChanged(int)), this, SLOT(goToFrame(int)));connect(speedSpinBox, SIGNAL(valueChanged(int)),movie, SLOT(setSpeed(int)));mainLayout = new QVBoxLayout;mainLayout->addWidget(movieLabel);mainLayout->addLayout(controlsLayout);mainLayout->addLayout(buttonsLayout);setLayout(mainLayout);updateFrameSlider();updateButtons();setWindowTitle(tr("Movie Player"));resize(400, 400); }void MoviePlayer::open() {QString fileName = QFileDialog::getOpenFileName(this, tr("Open a Movie"),currentMovieDirectory);if (!fileName.isEmpty())openFile(fileName); }void MoviePlayer::openFile(const QString &fileName) {currentMovieDirectory = QFileInfo(fileName).path();movie->stop();movieLabel->setMovie(movie);movie->setFileName(fileName);movie->start();updateFrameSlider();updateButtons(); }void MoviePlayer::goToFrame(int frame) {movie->jumpToFrame(frame); }void MoviePlayer::fitToWindow() {movieLabel->setScaledContents(fitCheckBox->isChecked()); }void MoviePlayer::updateFrameSlider() {bool hasFrames = (movie->currentFrameNumber() >= 0);if (hasFrames){if (movie->frameCount() > 0){frameSlider->setMaximum(movie->frameCount() - 1);}else{if (movie->currentFrameNumber() > frameSlider->maximum())frameSlider->setMaximum(movie->currentFrameNumber());}frameSlider->setValue(movie->currentFrameNumber());}else{frameSlider->setMaximum(0);}frameLabel->setEnabled(hasFrames);frameSlider->setEnabled(hasFrames); }void MoviePlayer::updateButtons() {playButton->setEnabled(movie->isValid() && movie->frameCount() != 1&& movie->state() == QMovie::NotRunning);pauseButton->setEnabled(movie->state() != QMovie::NotRunning);pauseButton->setChecked(movie->state() == QMovie::Paused);stopButton->setEnabled(movie->state() != QMovie::NotRunning); }void MoviePlayer::createControls() {fitCheckBox = new QCheckBox(tr("Fit to Window"));frameLabel = new QLabel(tr("Current frame:"));frameSlider = new QSlider(Qt::Horizontal);frameSlider->setTickPosition(QSlider::TicksBelow);frameSlider->setTickInterval(10);speedLabel = new QLabel(tr("Speed:"));speedSpinBox = new QSpinBox;speedSpinBox->setRange(1, 9999);speedSpinBox->setValue(100);speedSpinBox->setSuffix(tr("%"));controlsLayout = new QGridLayout; //格子布局controlsLayout->addWidget(fitCheckBox, 0, 0, 1, 2);controlsLayout->addWidget(frameLabel, 1, 0);controlsLayout->addWidget(frameSlider, 1, 1, 1, 2);controlsLayout->addWidget(speedLabel, 2, 0);controlsLayout->addWidget(speedSpinBox, 2, 1); }void MoviePlayer::createButtons() //按鈕水平布局 {QSize iconSize(36, 36);openButton = new QToolButton;openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));openButton->setIconSize(iconSize);openButton->setToolTip(tr("Open File"));connect(openButton, SIGNAL(clicked()), this, SLOT(open()));playButton = new QToolButton;playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));playButton->setIconSize(iconSize);playButton->setToolTip(tr("Play"));connect(playButton, SIGNAL(clicked()), movie, SLOT(start()));pauseButton = new QToolButton;pauseButton->setCheckable(true);pauseButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));pauseButton->setIconSize(iconSize);pauseButton->setToolTip(tr("Pause"));connect(pauseButton, SIGNAL(clicked(bool)), movie, SLOT(setPaused(bool)));stopButton = new QToolButton;stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));stopButton->setIconSize(iconSize);stopButton->setToolTip(tr("Stop"));connect(stopButton, SIGNAL(clicked()), movie, SLOT(stop()));quitButton = new QToolButton;quitButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));quitButton->setIconSize(iconSize);quitButton->setToolTip(tr("Quit"));connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));buttonsLayout = new QHBoxLayout;buttonsLayout->addStretch();buttonsLayout->addWidget(openButton);buttonsLayout->addWidget(playButton);buttonsLayout->addWidget(pauseButton);buttonsLayout->addWidget(stopButton);buttonsLayout->addWidget(quitButton);buttonsLayout->addStretch(); }


3. main.cpp

/*main.cpp*/#include <QApplication> #include "movieplayer.h" int main(int argc, char *argv[]) {QApplication app(argc, argv);MoviePlayer player;player.show();return app.exec(); }


動態效果圖:


總結

以上是生活随笔為你收集整理的Qt: GIF图片播放器(QMovie类)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。