C++/Qt/QMovie

Материал из C\C++ эксперт
Перейти к: навигация, поиск

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$
                                                                                                                                                        • /
  1. ifndef MOVIEPLAYER_H
  2. define MOVIEPLAYER_H
  3. 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;

};

  1. endif


  1. include <QtGui>
  2. 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();

}


  1. include <QApplication>
  2. include "movieplayer.h"

int main(int argc, char *argv[]) {

   QApplication app(argc, argv);
   MoviePlayer player;
   player.show();
   return app.exec();

}


 </source>