C++/Qt/QMovie
mng file player
<source lang="cpp"> /****************************************************************************
- Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
- All rights reserved.
- Contact: Nokia Corporation (qt-info@nokia.com)
- This file is part of the examples of the Qt Toolkit.
- $QT_BEGIN_LICENSE:LGPL$
- Commercial Usage
- Licensees holding valid Qt Commercial licenses may use this file in
- accordance with the Qt Commercial License Agreement provided with the
- Software or, alternatively, in accordance with the terms contained in
- a written agreement between you and Nokia.
- GNU Lesser General Public License Usage
- Alternatively, this file may be used under the terms of the GNU Lesser
- General Public License version 2.1 as published by the Free Software
- Foundation and appearing in the file LICENSE.LGPL included in the
- packaging of this file. Please review the following information to
- ensure the GNU Lesser General Public License version 2.1 requirements
- will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- In addition, as a special exception, Nokia gives you certain additional
- rights. These rights are described in the Nokia Qt LGPL Exception
- version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- GNU General Public License Usage
- Alternatively, this file may be used under the terms of the GNU
- General Public License version 3.0 as published by the Free Software
- Foundation and appearing in the file LICENSE.GPL included in the
- packaging of this file. Please review the following information to
- ensure the GNU General Public License version 3.0 requirements will be
- met: http://www.gnu.org/copyleft/gpl.html.
- If you have questions regarding the use of this file, please contact
- Nokia at qt-info@nokia.com.
- $QT_END_LICENSE$
-
- /
- ifndef MOVIEPLAYER_H
- define MOVIEPLAYER_H
- include <QWidget>
QT_BEGIN_NAMESPACE class QCheckBox; class QGridLayout; class QHBoxLayout; class QLabel; class QMovie; class QSlider; class QSpinBox; class QToolButton; class QVBoxLayout; QT_END_NAMESPACE class MoviePlayer : public QWidget {
Q_OBJECT
public:
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
- include <QtGui>
- 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::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);
} 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();
}
- include <QApplication>
- include "movieplayer.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv); MoviePlayer player; player.show(); return app.exec();
}
</source>