赞
踩
示例代码演示了如何使用QMovie和QLabel来显示动画(GIF)。如果想要播放简单的动画而没有安装和部署多媒体框架的复杂性,QMovie最有用。
widget.h
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include <QWidget>
-
- class QCheckBox;
- class QGridLayout;
- class QHBoxLayout;
- class QLabel;
- class QMovie;
- class QSlider;
- class QSpinBox;
- class QToolButton;
- class QVBoxLayout;
-
- namespace Ui {
- class Widget;
- }
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- void openFile(const QString &fileName);
- private slots:
- void open();
- void goToFrame(int frame);
- void fitToWindow();
- void updateButtons();
- void updateFrameSlider();
- private:
- Ui::Widget *ui;
- 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 // WIDGET_H
widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include <QtWidgets>
-
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- ui->setupUi(this);
- 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::Dark);
- movieLabel->setAutoFillBackground(true);
-
- currentMovieDirectory = "movies";
-
- 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);
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
- void Widget::open()
- {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open a Movie"),
- currentMovieDirectory);
- if (!fileName.isEmpty())
- openFile(fileName);
- }
-
- void Widget::openFile(const QString &fileName)
- {
- currentMovieDirectory = QFileInfo(fileName).path();
-
- movie->stop();
- movieLabel->setMovie(movie);
- movie->setFileName(fileName);
- movie->start();
-
- updateFrameSlider();
- updateButtons();
- }
-
- void Widget::goToFrame(int frame)
- {
- movie->jumpToFrame(frame);
- }
-
- void Widget::fitToWindow()
- {
- movieLabel->setScaledContents(fitCheckBox->isChecked());
- }
-
- void Widget::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 Widget::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 Widget::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 Widget::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();
- }
链接:https://pan.baidu.com/s/17yFaP0_yutI7NcNYmvGwBA
提取码:q182
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。