Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QT Multimedia players for multiple video files
Forum Update on Monday, May 27th 2025

QT Multimedia players for multiple video files

Scheduled Pinned Locked Moved Solved General and Desktop
multimediavideosgraphics viewc++mediaplayer
16 Posts 4 Posters 6.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Kinesis
    21 Jun 2018, 07:17

    Yes I use qmediaplayer . But not like that . Here is my mainwindow.cpp.But it is for only 1 video with 1 player . I want multiple media players for multiple videos.

    //mainwindow.cpp
    MainWindow::MainWindow(QWidget parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    QString directory = QFileDialog::getOpenFileName(this,tr("Open File"),"All files(
    .*)");
    m_mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);
    const QRect screenGeometry = QApplication::desktop()->screenGeometry(this);
    m_videoItem = new QGraphicsVideoItem;
    m_mediaPlayer->setMedia(QUrl::fromLocalFile(directory));
    m_videoItem->setSize(QSizeF(screenGeometry.width() / 3.2, screenGeometry.height() / 2.4));
    QGraphicsScene *scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    scene->addItem(m_videoItem);

    ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
    connect(ui->pushButton, &QAbstractButton::clicked, this, &MainWindow::play);

    m_mediaPlayer->setVideoOutput(m_videoItem);
    connect(m_mediaPlayer, &QMediaPlayer::stateChanged,
    this, &MainWindow::mediaStateChanged);
    connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
    connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);

    ui->horizontalSlider->setRange(0, 0);
    connect(ui->horizontalSlider, &QAbstractSlider::sliderMoved,
    this, &MainWindow::setPosition);
    MainWindow::~MainWindow()
    {
    delete ui;
    }

    QSize MainWindow::sizeHint() const
    {
    return (m_videoItem->size() * qreal(3) / qreal(2)).toSize();
    }

    bool MainWindow::isPlayerAvailable() const
    {
    return m_mediaPlayer->isAvailable();
    }

    void MainWindow::play()
    {
    switch (m_mediaPlayer->state()) {
    case QMediaPlayer::PlayingState:
    m_mediaPlayer->pause();
    break;
    default:
    m_mediaPlayer->play();
    break;
    }
    }

    void MainWindow::mediaStateChanged(QMediaPlayer::State state)
    {
    switch(state) {
    case QMediaPlayer::PlayingState:
    ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
    break;
    default:
    ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
    break;
    }
    }

    void MainWindow::positionChanged(qint64 position)
    {
    ui->horizontalSlider->setValue(position);
    }

    void MainWindow::durationChanged(qint64 duration)
    {
    ui->horizontalSlider->setRange(0, duration);
    }

    void MainWindow::setPosition(int position)
    {
    m_mediaPlayer->setPosition(position);
    }

    J Online
    J Online
    jsulm
    Lifetime Qt Champion
    wrote on 21 Jun 2018, 08:03 last edited by
    #6

    @Kinesis As @SGaist said you can create as many of them as you need.
    What is the problem?
    If you can create one you can create many in the same way...

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    1
    • K Offline
      K Offline
      Kinesis
      wrote on 21 Jun 2018, 08:41 last edited by
      #7

      @jsulm
      The Problem is I don't know how to create multiple media players for multiple videos which are filtered from directory with looping or some QClasses .

      J 1 Reply Last reply 21 Jun 2018, 08:42
      0
      • K Kinesis
        21 Jun 2018, 08:41

        @jsulm
        The Problem is I don't know how to create multiple media players for multiple videos which are filtered from directory with looping or some QClasses .

        J Online
        J Online
        jsulm
        Lifetime Qt Champion
        wrote on 21 Jun 2018, 08:42 last edited by
        #8

        @Kinesis Please specify what exactly the problem is.
        Is it: how to filter files in a directory?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • K Offline
          K Offline
          Kinesis
          wrote on 21 Jun 2018, 08:51 last edited by Kinesis
          #9

          @jsulm
          Filtering the video file is not the problem.
          The problem is I don't know how to show the filtered videos with media players.
          It means that 1 video per 1 player , 5 videos per 5 players.

          J 1 Reply Last reply 21 Jun 2018, 09:01
          0
          • K Kinesis
            21 Jun 2018, 08:51

            @jsulm
            Filtering the video file is not the problem.
            The problem is I don't know how to show the filtered videos with media players.
            It means that 1 video per 1 player , 5 videos per 5 players.

            J Online
            J Online
            jsulm
            Lifetime Qt Champion
            wrote on 21 Jun 2018, 09:01 last edited by
            #10

            @Kinesis You iterate over all the video files and create a player for each (like you already did above for one).

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            2
            • K Offline
              K Offline
              Kinesis
              wrote on 21 Jun 2018, 09:08 last edited by Kinesis
              #11

              @jsulm
              I know the logic but when it comes to coding I am really weak . please show me how to do it(just 1 example) . please :(

              J 1 Reply Last reply 21 Jun 2018, 09:09
              0
              • K Kinesis
                21 Jun 2018, 09:08

                @jsulm
                I know the logic but when it comes to coding I am really weak . please show me how to do it(just 1 example) . please :(

                J Online
                J Online
                jsulm
                Lifetime Qt Champion
                wrote on 21 Jun 2018, 09:09 last edited by
                #12

                @Kinesis Sorry, I will not write the code for you.
                I really don't understand what the problem is as you already managed to create one player for one file...

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                2
                • K Offline
                  K Offline
                  Kinesis
                  wrote on 21 Jun 2018, 09:47 last edited by
                  #13

                  @jsulm
                  Thanks for your help.I really appreciate that.

                  mrjjM 1 Reply Last reply 21 Jun 2018, 15:14
                  0
                  • K Kinesis
                    21 Jun 2018, 09:47

                    @jsulm
                    Thanks for your help.I really appreciate that.

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 21 Jun 2018, 15:14 last edited by
                    #14

                    @Kinesis
                    Hi
                    It is easier to help if you break down task in steps and ask pr step what we
                    would suggest.
                    Like getting all files in a folder you could do

                    #include <QDir>
                    //assume the directory exists and contains some files 
                    QDir directory("c:/xx/yyy"); // point to real folder
                    // ask for mp4 and avi. adjust to your needs
                    QStringList vids= directory.entryList(QStringList() << "*.mp4" << "*.avi",QDir::Files);
                    foreach(const QString &filename, vids) {
                    // new a player 
                    // insert to form or show as window
                    // give it file
                    // tell it to play
                    }
                    
                    K 1 Reply Last reply 22 Jun 2018, 04:24
                    2
                    • mrjjM mrjj
                      21 Jun 2018, 15:14

                      @Kinesis
                      Hi
                      It is easier to help if you break down task in steps and ask pr step what we
                      would suggest.
                      Like getting all files in a folder you could do

                      #include <QDir>
                      //assume the directory exists and contains some files 
                      QDir directory("c:/xx/yyy"); // point to real folder
                      // ask for mp4 and avi. adjust to your needs
                      QStringList vids= directory.entryList(QStringList() << "*.mp4" << "*.avi",QDir::Files);
                      foreach(const QString &filename, vids) {
                      // new a player 
                      // insert to form or show as window
                      // give it file
                      // tell it to play
                      }
                      
                      K Offline
                      K Offline
                      Kinesis
                      wrote on 22 Jun 2018, 04:24 last edited by
                      #15

                      @mrjj
                      Thanks alot.

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        Kinesis
                        wrote on 16 Jul 2018, 07:02 last edited by
                        #16

                        I got the answer . MainWindow.cpp is like that

                         ui->listWidget->setFlow(QListView::LeftToRight);
                            ui->listWidget->setMinimumSize(1050,800);
                            ui->listWidget->setGridSize(QSize(340, 320));
                            ui->listWidget->setResizeMode(QListView::Adjust);
                            ui->listWidget->setViewMode(QListView::ListMode);
                            ui->listWidget->setWrapping(true);
                        
                            QDir directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home",
                        
                                                                               QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
                        
                            directory.setNameFilters({"*.mp4" , "*.avi" , "*.flv" , "*.mwv"});
                        
                            for(const QFileInfo & finfo: directory.entryInfoList()){
                                QMediaPlayer *mediaPlayer = new QMediaPlayer();
                                mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                videoItem = new QGraphicsVideoItem;
                                videoItem->setSize(QSize(300,240));
                                QGraphicsScene *scene = new QGraphicsScene(this);
                                QGraphicsView *graphicsView = new QGraphicsView(scene);
                                mediaPlayer->setVideoOutput(videoItem);
                        
                                QPushButton *m_playButton = new QPushButton();
                                m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                        
                                connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                    switch (mediaPlayer->state()) {
                                    case QMediaPlayer::PlayingState:
                                        mediaPlayer->pause();
                                        break;
                                    default:
                                        mediaPlayer->play();
                                        break;
                                    }
                                });
                        
                        
                                connect(mediaPlayer, &QMediaPlayer::stateChanged, [m_playButton, this](QMediaPlayer::State state) {
                                    switch(state) {
                                    case QMediaPlayer::PlayingState:
                                        m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
                                        break;
                                    default:
                                        m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                                        break;
                                    }
                                });
                        
                        
                        
                                QSlider *m_positionSlider = new QSlider(Qt::Horizontal,this);
                                m_positionSlider->setRange(0,mediaPlayer->duration() / 1000);
                        
                        
                                connect(mediaPlayer, &QMediaPlayer::positionChanged ,[m_positionSlider, this](qint64 position){
                        
                                    m_positionSlider->setValue(position);
                                });
                        
                                connect(mediaPlayer, &QMediaPlayer::durationChanged ,[m_positionSlider, this](qint64 duration){
                        
                                    m_positionSlider->setRange(0,duration);
                                });
                        
                        
                                connect(m_positionSlider ,&QAbstractSlider::sliderMoved, [mediaPlayer ,this] (int position){
                        
                                    mediaPlayer->setPosition(position);
                                });
                        
                        
                        
                        
                                auto    item = new QListWidgetItem("", ui->listWidget);
                                auto    widget = new QWidget;
                                auto    label = new QLabel(finfo.fileName());
                                auto    vb = new QVBoxLayout;
                        
                                QBoxLayout *controlLayout = new QHBoxLayout;
                                controlLayout->setMargin(0);
                                controlLayout->addWidget(m_playButton);
                                controlLayout->addWidget(m_positionSlider);
                        
                                vb->addWidget(label);
                                vb->addWidget(graphicsView);
                                vb->addLayout(controlLayout);
                                widget->setLayout(vb);
                                widget->setMinimumSize(320, 320);
                                ui->listWidget->setItemWidget(item,widget);
                                player.append(mediaPlayer);
                                scene->addItem(videoItem);
                        
                        
                        
                            }
                        
                        1 Reply Last reply
                        1

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved