Qt: GIF图片播放器(QMovie类)
生活随笔
收集整理的這篇文章主要介紹了
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类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java-net-php-python-
- 下一篇: VW 80000-2021版,最新发行,