From 31ed506ea2c7a8be439d77e02ca0d67b6f9ce675 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 23 Nov 2016 14:20:04 +0100 Subject: Polish the QtWidgets/videographicsitem example Similar to 787211c1d2082874ea07be4c5987032221ee48fe: - Point the file dialog to the Movies folder. - Port to Qt 5 connection syntax. - Add command line handling. - Determine size according to screen size. Change-Id: I21b195a9241dbac332ce74168bd43f1d8c273091 Reviewed-by: Yoann Lopes --- .../multimediawidgets/videographicsitem/main.cpp | 21 ++++++++ .../videographicsitem/videoplayer.cpp | 58 ++++++++++++++-------- .../videographicsitem/videoplayer.h | 5 +- 3 files changed, 62 insertions(+), 22 deletions(-) diff --git a/examples/multimediawidgets/videographicsitem/main.cpp b/examples/multimediawidgets/videographicsitem/main.cpp index 25ac7af06..d5fcdb2d8 100644 --- a/examples/multimediawidgets/videographicsitem/main.cpp +++ b/examples/multimediawidgets/videographicsitem/main.cpp @@ -41,12 +41,33 @@ #include "videoplayer.h" #include +#include +#include +#include int main(int argc, char **argv) { QApplication app(argc, argv); + QCoreApplication::setApplicationName("Player Example"); + QCoreApplication::setOrganizationName("QtProject"); + QCoreApplication::setApplicationVersion(QT_VERSION_STR); + QCommandLineParser parser; + parser.setApplicationDescription("Qt MultiMedia Player QGraphicsView Example"); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument("url", "The URL to open."); + parser.process(app); + VideoPlayer player; + + if (!parser.positionalArguments().isEmpty() && player.isPlayerAvailable()) { + const QUrl url = + QUrl::fromUserInput(parser.positionalArguments().constFirst(), + QDir::currentPath(), QUrl::AssumeLocalFile); + player.load(url); + } + player.show(); return app.exec(); diff --git a/examples/multimediawidgets/videographicsitem/videoplayer.cpp b/examples/multimediawidgets/videographicsitem/videoplayer.cpp index fcfe38b26..7f5c4f0bb 100644 --- a/examples/multimediawidgets/videographicsitem/videoplayer.cpp +++ b/examples/multimediawidgets/videographicsitem/videoplayer.cpp @@ -51,8 +51,9 @@ VideoPlayer::VideoPlayer(QWidget *parent) , playButton(0) , positionSlider(0) { + const QRect screenGeometry = QApplication::desktop()->screenGeometry(this); videoItem = new QGraphicsVideoItem; - videoItem->setSize(QSizeF(640, 480)); + videoItem->setSize(QSizeF(screenGeometry.width() / 3, screenGeometry.height() / 2)); QGraphicsScene *scene = new QGraphicsScene(this); QGraphicsView *graphicsView = new QGraphicsView(scene); @@ -60,27 +61,27 @@ VideoPlayer::VideoPlayer(QWidget *parent) scene->addItem(videoItem); QSlider *rotateSlider = new QSlider(Qt::Horizontal); + rotateSlider->setToolTip(tr("Rotate Video")); rotateSlider->setRange(-180, 180); rotateSlider->setValue(0); - connect(rotateSlider, SIGNAL(valueChanged(int)), - this, SLOT(rotateVideo(int))); + connect(rotateSlider, &QAbstractSlider::valueChanged, + this, &VideoPlayer::rotateVideo); QAbstractButton *openButton = new QPushButton(tr("Open...")); - connect(openButton, SIGNAL(clicked()), this, SLOT(openFile())); + connect(openButton, &QAbstractButton::clicked, this, &VideoPlayer::openFile); playButton = new QPushButton; playButton->setEnabled(false); playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); - connect(playButton, SIGNAL(clicked()), - this, SLOT(play())); + connect(playButton, &QAbstractButton::clicked, this, &VideoPlayer::play); positionSlider = new QSlider(Qt::Horizontal); positionSlider->setRange(0, 0); - connect(positionSlider, SIGNAL(sliderMoved(int)), - this, SLOT(setPosition(int))); + connect(positionSlider, &QAbstractSlider::sliderMoved, + this, &VideoPlayer::setPosition); QBoxLayout *controlLayout = new QHBoxLayout; controlLayout->setMargin(0); @@ -88,34 +89,49 @@ VideoPlayer::VideoPlayer(QWidget *parent) controlLayout->addWidget(playButton); controlLayout->addWidget(positionSlider); - QBoxLayout *layout = new QVBoxLayout; + QBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(graphicsView); layout->addWidget(rotateSlider); layout->addLayout(controlLayout); - setLayout(layout); - mediaPlayer.setVideoOutput(videoItem); - connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), - this, SLOT(mediaStateChanged(QMediaPlayer::State))); - connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64))); - connect(&mediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(durationChanged(qint64))); + connect(&mediaPlayer, &QMediaPlayer::stateChanged, + this, &VideoPlayer::mediaStateChanged); + connect(&mediaPlayer, &QMediaPlayer::positionChanged, this, &VideoPlayer::positionChanged); + connect(&mediaPlayer, &QMediaPlayer::durationChanged, this, &VideoPlayer::durationChanged); } VideoPlayer::~VideoPlayer() { } +QSize VideoPlayer::sizeHint() const +{ + return (videoItem->size() * qreal(3) / qreal(2)).toSize(); +} -void VideoPlayer::openFile() +bool VideoPlayer::isPlayerAvailable() const { - QString fileName = QFileDialog::getOpenFileName(this, tr("Open Movie"),QDir::homePath()); + return mediaPlayer.isAvailable(); +} - if (!fileName.isEmpty()) { - mediaPlayer.setMedia(QUrl::fromLocalFile(fileName)); +void VideoPlayer::openFile() +{ + QFileDialog fileDialog(this); + fileDialog.setAcceptMode(QFileDialog::AcceptOpen); + fileDialog.setWindowTitle(tr("Open Movie")); + const QStringList supportedMimeTypes = mediaPlayer.supportedMimeTypes(); + if (!supportedMimeTypes.isEmpty()) + fileDialog.setMimeTypeFilters(supportedMimeTypes); + fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath())); + if (fileDialog.exec() == QDialog::Accepted) + load(fileDialog.selectedUrls().constFirst()); +} - playButton->setEnabled(true); - } +void VideoPlayer::load(const QUrl &url) +{ + mediaPlayer.setMedia(url); + playButton->setEnabled(true); } void VideoPlayer::play() diff --git a/examples/multimediawidgets/videographicsitem/videoplayer.h b/examples/multimediawidgets/videographicsitem/videoplayer.h index 9c67e1c7e..914c59499 100644 --- a/examples/multimediawidgets/videographicsitem/videoplayer.h +++ b/examples/multimediawidgets/videographicsitem/videoplayer.h @@ -59,7 +59,10 @@ public: VideoPlayer(QWidget *parent = 0); ~VideoPlayer(); - QSize sizeHint() const { return QSize(800, 600); } + void load(const QUrl &url); + bool isPlayerAvailable() const; + + QSize sizeHint() const Q_DECL_OVERRIDE; public slots: void openFile(); -- cgit v1.2.3