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. Media player not working for multiple videos
Forum Update on Monday, May 27th 2025

Media player not working for multiple videos

Scheduled Pinned Locked Moved Solved General and Desktop
qt 5.5videosurfacemedia playergraphicview
41 Posts 8 Posters 9.5k 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

    @jsulm
    AHH , OK .
    But what should I do about slots . I am using slots to play and pause functions . Slots need mediaPlayer to link with actions. In that case *mediaPlayer is not member variable . So I can't use *mediaPlayer in slots. What should I do?

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #9

    @Kinesis What is the problem with connect()? You have the pointer to QMediaPlayer inside the loop where you call connect():

    for(const QFileInfo & finfo: directory.entryInfoList()){
        QMediaPlayer *mediaPlayer = new QMediaPlayer(); // You need to create one for each video as you want to show all at the same time, right?
        mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
        connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
    ...
        mediaPlayer->setVideoOutput(m_videoItem);
        m_mediaPlayer.append(mediaPlayer);
    
    

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

    K 1 Reply Last reply
    1
    • jsulmJ jsulm

      @Kinesis What is the problem with connect()? You have the pointer to QMediaPlayer inside the loop where you call connect():

      for(const QFileInfo & finfo: directory.entryInfoList()){
          QMediaPlayer *mediaPlayer = new QMediaPlayer(); // You need to create one for each video as you want to show all at the same time, right?
          mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
          connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
      ...
          mediaPlayer->setVideoOutput(m_videoItem);
          m_mediaPlayer.append(mediaPlayer);
      
      
      K Offline
      K Offline
      Kinesis
      wrote on last edited by
      #10

      @jsulm
      It keeps showing "error: use of undeclared identifier 'mediaPlayer' " like in this slot

      void MainWindow::play()
      {
          switch (mediaPlayer->state()) {
          case QMediaPlayer::PlayingState:
              mediaPlayer->pause();
              break;
          default:
              mediaPlayer->play();
              break;
          }
      }
      
      jsulmJ 1 Reply Last reply
      0
      • K Kinesis

        @jsulm
        It keeps showing "error: use of undeclared identifier 'mediaPlayer' " like in this slot

        void MainWindow::play()
        {
            switch (mediaPlayer->state()) {
            case QMediaPlayer::PlayingState:
                mediaPlayer->pause();
                break;
            default:
                mediaPlayer->play();
                break;
            }
        }
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by jsulm
        #11

        @Kinesis And how is this related to connect() call?
        You need to understand: you have MANY media players, not just one. You put all of them in a list. That means if user presses play you need to get the one media player user wants to play. And then use this player.
        Something like:

        void MainWindow::play()
        {
            QMediaPlayer *mediaPlayer = player[currentIndex];
            switch (mediaPlayer->state()) {
            case QMediaPlayer::PlayingState:
                mediaPlayer->pause();
                break;
            default:
                mediaPlayer->play();
                break;
            }
        }
        

        I don't know how to determine the value of currentIndex, as I don't know much about your app.

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

        K 1 Reply Last reply
        3
        • jsulmJ jsulm

          @Kinesis And how is this related to connect() call?
          You need to understand: you have MANY media players, not just one. You put all of them in a list. That means if user presses play you need to get the one media player user wants to play. And then use this player.
          Something like:

          void MainWindow::play()
          {
              QMediaPlayer *mediaPlayer = player[currentIndex];
              switch (mediaPlayer->state()) {
              case QMediaPlayer::PlayingState:
                  mediaPlayer->pause();
                  break;
              default:
                  mediaPlayer->play();
                  break;
              }
          }
          

          I don't know how to determine the value of currentIndex, as I don't know much about your app.

          K Offline
          K Offline
          Kinesis
          wrote on last edited by
          #12

          @jsulm
          Its seem like it will work this time. How can I determine the value of currentIndex?

          jsulmJ 1 Reply Last reply
          0
          • K Kinesis

            @jsulm
            Its seem like it will work this time. How can I determine the value of currentIndex?

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by jsulm
            #13

            @Kinesis "How can I determine the value of currentIndex?" - as I said - I don't know.
            How does the user select the video to play?

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

            K 1 Reply Last reply
            0
            • jsulmJ jsulm

              @Kinesis "How can I determine the value of currentIndex?" - as I said - I don't know.
              How does the user select the video to play?

              K Offline
              K Offline
              Kinesis
              wrote on last edited by
              #14

              @jsulm
              I found that the buttons are linking each other . If I press the play button of 1st video It also play second video . How can I fix that .

              jsulmJ 1 Reply Last reply
              0
              • K Kinesis

                @jsulm
                I found that the buttons are linking each other . If I press the play button of 1st video It also play second video . How can I fix that .

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by jsulm
                #15

                @Kinesis You could use lambda (C++11: https://en.cppreference.com/w/cpp/language/lambda):

                connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                switch (mediaPlayer->state()) {
                case QMediaPlayer::PlayingState:
                    mediaPlayer->pause();
                    break;
                default:
                    mediaPlayer->play();
                    break;
                }
                });
                

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

                K 1 Reply Last reply
                3
                • jsulmJ jsulm

                  @Kinesis You could use lambda (C++11: https://en.cppreference.com/w/cpp/language/lambda):

                  connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                  switch (mediaPlayer->state()) {
                  case QMediaPlayer::PlayingState:
                      mediaPlayer->pause();
                      break;
                  default:
                      mediaPlayer->play();
                      break;
                  }
                  });
                  
                  K Offline
                  K Offline
                  Kinesis
                  wrote on last edited by
                  #16

                  @jsulm
                  Thanks . now the buttons are not linked any more. But my first problem is back . I can't play all videos . I can just play 1 video(last video) when I load 2 videos , I can't play any videos when i load more than 2 . I don't know what to do now . I am really stuck at this stage for 4 days. I really appreciate your help for helping until now.

                  jsulmJ 1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #17

                    Are your buttons supposed to control all video players at once ? If so, then do it as I suggested and go it iterate through the vector of players and control them all.

                    If you want to control each player separately then you have have to create as many buttons as players.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    jsulmJ 1 Reply Last reply
                    2
                    • K Kinesis

                      @jsulm
                      Thanks . now the buttons are not linked any more. But my first problem is back . I can't play all videos . I can just play 1 video(last video) when I load 2 videos , I can't play any videos when i load more than 2 . I don't know what to do now . I am really stuck at this stage for 4 days. I really appreciate your help for helping until now.

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #18

                      @Kinesis said in Media player not working for multiple videos:

                      I can just play 1 video(last video)

                      Sounds like you still use global mediaPlayer - do you?
                      Did you change the code as I suggested?

                      for(const QFileInfo & finfo: directory.entryInfoList()){
                          QMediaPlayer *mediaPlayer = new QMediaPlayer(); // DO NOT USE GLOBAL mediaPlayer!
                          mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                      ...
                          connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                              switch (mediaPlayer->state()) {
                              case QMediaPlayer::PlayingState:
                                  mediaPlayer->pause();
                                  break;
                              default:
                                  mediaPlayer->play();
                                  break;
                          }
                          });
                      ...
                          mediaPlayer->setVideoOutput(m_videoItem);
                          m_mediaPlayer.append(mediaPlayer);
                      

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

                      K 1 Reply Last reply
                      0
                      • SGaistS SGaist

                        Are your buttons supposed to control all video players at once ? If so, then do it as I suggested and go it iterate through the vector of players and control them all.

                        If you want to control each player separately then you have have to create as many buttons as players.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #19

                        @SGaist He creates one button for each video

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

                        1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @Kinesis said in Media player not working for multiple videos:

                          I can just play 1 video(last video)

                          Sounds like you still use global mediaPlayer - do you?
                          Did you change the code as I suggested?

                          for(const QFileInfo & finfo: directory.entryInfoList()){
                              QMediaPlayer *mediaPlayer = new QMediaPlayer(); // DO NOT USE GLOBAL mediaPlayer!
                              mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                          ...
                              connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                  switch (mediaPlayer->state()) {
                                  case QMediaPlayer::PlayingState:
                                      mediaPlayer->pause();
                                      break;
                                  default:
                                      mediaPlayer->play();
                                      break;
                              }
                              });
                          ...
                              mediaPlayer->setVideoOutput(m_videoItem);
                              m_mediaPlayer.append(mediaPlayer);
                          
                          K Offline
                          K Offline
                          Kinesis
                          wrote on last edited by
                          #20

                          @jsulm
                          I am not using mediaPlayer as global variable . Here is my updated code

                          MainWindow::MainWindow(QWidget *parent) :
                              QMainWindow(parent),
                              ui(new Ui::MainWindow)
                          {
                              ui->setupUi(this);
                          
                              ui->listWidget->setFlow(QListView::LeftToRight);
                              ui->listWidget->setMinimumSize(760,350);
                              ui->listWidget->setGridSize(QSize(360, 360));
                              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();
                                  //player = new QMediaPlayer(this,QMediaPlayer::VideoSurface);
                                  //player = new QVector<QMediaPlayer*>();
                                  //playlist = new QMediaPlaylist;
                                  // playlist->addMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                  //mediaPlayer = new QMediaPlayer();
                                  mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                  // mediaPlayer->setMedia(playlist);
                                  videoItem = new QGraphicsVideoItem;
                                  //videoItem->setSize(QSize(320,240));
                                  QGraphicsScene *scene = new QGraphicsScene(this);
                                  QGraphicsView *graphicsView = new QGraphicsView(scene);
                                  scene->addItem(videoItem);
                          
                                  mediaPlayer->setVideoOutput(videoItem);
                                  player.append(mediaPlayer);
                          
                                  connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                                  connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                                  connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                          
                                  m_playButton = new QPushButton;
                                  m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                          
                          
                                  m_positionSlider = new QSlider(Qt::Horizontal);
                                  m_positionSlider->setRange(0, 0);
                                  connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                  connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                          
                          
                          
                                  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,1);
                                  vb->addWidget(graphicsView,9);
                                  vb->addLayout(controlLayout);
                                  widget->setLayout(vb);
                                  widget->setMinimumSize(340, 340);
                                  ui->listWidget->setItemWidget(item,widget);
                          
                          
                              }
                              
                          
                          
                          }
                          MainWindow::~MainWindow()
                          {
                              delete ui;
                          }
                          QSize MainWindow::sizeHint() const
                          {
                              return (videoItem->size() * qreal(3) / qreal(2)).toSize();
                          }
                          
                          bool MainWindow::isPlayerAvailable() const
                          {   QMediaPlayer *mediaPlayer = player[1];
                              return mediaPlayer->isAvailable();
                          }
                          
                          
                          
                          void MainWindow::play()
                          {
                              QMediaPlayer *mediaPlayer = player[1];
                              connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                              switch (mediaPlayer->state()) {
                              case QMediaPlayer::PlayingState:
                                  mediaPlayer->pause();
                                  break;
                              default:
                                  mediaPlayer->play();
                                  break;
                              }
                          });
                          }
                          
                          void MainWindow::mediaStateChanged(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;
                              }
                          }
                          
                          void MainWindow::positionChanged(qint64 position)
                          {
                              m_positionSlider->setValue(position);
                          }
                          
                          void MainWindow::durationChanged(qint64 duration)
                          {
                              m_positionSlider->setRange(0, duration);
                          }
                          
                          void MainWindow::setPosition(int position)
                          {
                              QMediaPlayer *mediaPlayer = player[1];
                              mediaPlayer->setPosition(position);
                          }
                          
                          J.HilkJ jsulmJ 2 Replies Last reply
                          0
                          • K Kinesis

                            @jsulm
                            I am not using mediaPlayer as global variable . Here is my updated code

                            MainWindow::MainWindow(QWidget *parent) :
                                QMainWindow(parent),
                                ui(new Ui::MainWindow)
                            {
                                ui->setupUi(this);
                            
                                ui->listWidget->setFlow(QListView::LeftToRight);
                                ui->listWidget->setMinimumSize(760,350);
                                ui->listWidget->setGridSize(QSize(360, 360));
                                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();
                                    //player = new QMediaPlayer(this,QMediaPlayer::VideoSurface);
                                    //player = new QVector<QMediaPlayer*>();
                                    //playlist = new QMediaPlaylist;
                                    // playlist->addMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                    //mediaPlayer = new QMediaPlayer();
                                    mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                    // mediaPlayer->setMedia(playlist);
                                    videoItem = new QGraphicsVideoItem;
                                    //videoItem->setSize(QSize(320,240));
                                    QGraphicsScene *scene = new QGraphicsScene(this);
                                    QGraphicsView *graphicsView = new QGraphicsView(scene);
                                    scene->addItem(videoItem);
                            
                                    mediaPlayer->setVideoOutput(videoItem);
                                    player.append(mediaPlayer);
                            
                                    connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                                    connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                                    connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                            
                                    m_playButton = new QPushButton;
                                    m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                            
                            
                                    m_positionSlider = new QSlider(Qt::Horizontal);
                                    m_positionSlider->setRange(0, 0);
                                    connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                    connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                            
                            
                            
                                    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,1);
                                    vb->addWidget(graphicsView,9);
                                    vb->addLayout(controlLayout);
                                    widget->setLayout(vb);
                                    widget->setMinimumSize(340, 340);
                                    ui->listWidget->setItemWidget(item,widget);
                            
                            
                                }
                                
                            
                            
                            }
                            MainWindow::~MainWindow()
                            {
                                delete ui;
                            }
                            QSize MainWindow::sizeHint() const
                            {
                                return (videoItem->size() * qreal(3) / qreal(2)).toSize();
                            }
                            
                            bool MainWindow::isPlayerAvailable() const
                            {   QMediaPlayer *mediaPlayer = player[1];
                                return mediaPlayer->isAvailable();
                            }
                            
                            
                            
                            void MainWindow::play()
                            {
                                QMediaPlayer *mediaPlayer = player[1];
                                connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                switch (mediaPlayer->state()) {
                                case QMediaPlayer::PlayingState:
                                    mediaPlayer->pause();
                                    break;
                                default:
                                    mediaPlayer->play();
                                    break;
                                }
                            });
                            }
                            
                            void MainWindow::mediaStateChanged(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;
                                }
                            }
                            
                            void MainWindow::positionChanged(qint64 position)
                            {
                                m_positionSlider->setValue(position);
                            }
                            
                            void MainWindow::durationChanged(qint64 duration)
                            {
                                m_positionSlider->setRange(0, duration);
                            }
                            
                            void MainWindow::setPosition(int position)
                            {
                                QMediaPlayer *mediaPlayer = player[1];
                                mediaPlayer->setPosition(position);
                            }
                            
                            J.HilkJ Offline
                            J.HilkJ Offline
                            J.Hilk
                            Moderators
                            wrote on last edited by
                            #21

                            @Kinesis
                            your still not doing what @jsulm suggested.

                            this

                            void MainWindow::play()
                            {
                                QMediaPlayer *mediaPlayer = player[1];
                                connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                switch (mediaPlayer->state()) {
                                case QMediaPlayer::PlayingState:
                                    mediaPlayer->pause();
                                    break;
                                default:
                                    mediaPlayer->play();
                                    break;
                                }
                            });
                            }
                            

                            is wrong and at the wrong place

                            delete that function all together

                            and in your loop replace

                            connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                            

                            with

                            @jsulm said in Media player not working for multiple videos:

                            connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                switch (mediaPlayer->state()) {
                                case QMediaPlayer::PlayingState:
                                    mediaPlayer->pause();
                                    break;
                                default:
                                    mediaPlayer->play();
                                    break;
                            }
                            });
                            

                            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                            Q: What's that?
                            A: It's blue light.
                            Q: What does it do?
                            A: It turns blue.

                            1 Reply Last reply
                            3
                            • K Kinesis

                              @jsulm
                              I am not using mediaPlayer as global variable . Here is my updated code

                              MainWindow::MainWindow(QWidget *parent) :
                                  QMainWindow(parent),
                                  ui(new Ui::MainWindow)
                              {
                                  ui->setupUi(this);
                              
                                  ui->listWidget->setFlow(QListView::LeftToRight);
                                  ui->listWidget->setMinimumSize(760,350);
                                  ui->listWidget->setGridSize(QSize(360, 360));
                                  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();
                                      //player = new QMediaPlayer(this,QMediaPlayer::VideoSurface);
                                      //player = new QVector<QMediaPlayer*>();
                                      //playlist = new QMediaPlaylist;
                                      // playlist->addMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                      //mediaPlayer = new QMediaPlayer();
                                      mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                      // mediaPlayer->setMedia(playlist);
                                      videoItem = new QGraphicsVideoItem;
                                      //videoItem->setSize(QSize(320,240));
                                      QGraphicsScene *scene = new QGraphicsScene(this);
                                      QGraphicsView *graphicsView = new QGraphicsView(scene);
                                      scene->addItem(videoItem);
                              
                                      mediaPlayer->setVideoOutput(videoItem);
                                      player.append(mediaPlayer);
                              
                                      connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                                      connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                                      connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                              
                                      m_playButton = new QPushButton;
                                      m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                              
                              
                                      m_positionSlider = new QSlider(Qt::Horizontal);
                                      m_positionSlider->setRange(0, 0);
                                      connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                      connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                              
                              
                              
                                      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,1);
                                      vb->addWidget(graphicsView,9);
                                      vb->addLayout(controlLayout);
                                      widget->setLayout(vb);
                                      widget->setMinimumSize(340, 340);
                                      ui->listWidget->setItemWidget(item,widget);
                              
                              
                                  }
                                  
                              
                              
                              }
                              MainWindow::~MainWindow()
                              {
                                  delete ui;
                              }
                              QSize MainWindow::sizeHint() const
                              {
                                  return (videoItem->size() * qreal(3) / qreal(2)).toSize();
                              }
                              
                              bool MainWindow::isPlayerAvailable() const
                              {   QMediaPlayer *mediaPlayer = player[1];
                                  return mediaPlayer->isAvailable();
                              }
                              
                              
                              
                              void MainWindow::play()
                              {
                                  QMediaPlayer *mediaPlayer = player[1];
                                  connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                  switch (mediaPlayer->state()) {
                                  case QMediaPlayer::PlayingState:
                                      mediaPlayer->pause();
                                      break;
                                  default:
                                      mediaPlayer->play();
                                      break;
                                  }
                              });
                              }
                              
                              void MainWindow::mediaStateChanged(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;
                                  }
                              }
                              
                              void MainWindow::positionChanged(qint64 position)
                              {
                                  m_positionSlider->setValue(position);
                              }
                              
                              void MainWindow::durationChanged(qint64 duration)
                              {
                                  m_positionSlider->setRange(0, duration);
                              }
                              
                              void MainWindow::setPosition(int position)
                              {
                                  QMediaPlayer *mediaPlayer = player[1];
                                  mediaPlayer->setPosition(position);
                              }
                              
                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #22

                              @Kinesis You should think about the code you're writing and you should read what I'm writing more carefully. To be honest I'm tired of writing code for you and then see that you're not trying it but doing something else. The code you posted now is NOT what I suggested (again).

                              void MainWindow::play()
                              {
                                  QMediaPlayer *mediaPlayer = player[1];
                              

                              Do you really think this code can work correctly? You always try to use SECOND player! How is it going to work?!
                              I post here my code once more, but for the last time:

                              for(const QFileInfo & finfo: directory.entryInfoList()){
                                  QMediaPlayer *mediaPlayer = new QMediaPlayer(); // DO NOT USE GLOBAL mediaPlayer!
                                  mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                              ...
                                  connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                      switch (mediaPlayer->state()) {
                                      case QMediaPlayer::PlayingState:
                                          mediaPlayer->pause();
                                          break;
                                      default:
                                          mediaPlayer->play();
                                          break;
                                  }
                                  });
                              ...
                                  mediaPlayer->setVideoOutput(m_videoItem);
                                  m_mediaPlayer.append(mediaPlayer);
                              

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

                              K 1 Reply Last reply
                              5
                              • jsulmJ jsulm

                                @Kinesis You should think about the code you're writing and you should read what I'm writing more carefully. To be honest I'm tired of writing code for you and then see that you're not trying it but doing something else. The code you posted now is NOT what I suggested (again).

                                void MainWindow::play()
                                {
                                    QMediaPlayer *mediaPlayer = player[1];
                                

                                Do you really think this code can work correctly? You always try to use SECOND player! How is it going to work?!
                                I post here my code once more, but for the last time:

                                for(const QFileInfo & finfo: directory.entryInfoList()){
                                    QMediaPlayer *mediaPlayer = new QMediaPlayer(); // DO NOT USE GLOBAL mediaPlayer!
                                    mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                ...
                                    connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                        switch (mediaPlayer->state()) {
                                        case QMediaPlayer::PlayingState:
                                            mediaPlayer->pause();
                                            break;
                                        default:
                                            mediaPlayer->play();
                                            break;
                                    }
                                    });
                                ...
                                    mediaPlayer->setVideoOutput(m_videoItem);
                                    m_mediaPlayer.append(mediaPlayer);
                                
                                K Offline
                                K Offline
                                Kinesis
                                wrote on last edited by
                                #23

                                @jsulm
                                I got it now . Sorry for wasting your time . Now I can play both videos . Do I need to replace the button state change into loop? Because button state(Icon) is not changing correctly and linking with other media players.

                                jsulmJ 1 Reply Last reply
                                0
                                • K Kinesis

                                  @jsulm
                                  I got it now . Sorry for wasting your time . Now I can play both videos . Do I need to replace the button state change into loop? Because button state(Icon) is not changing correctly and linking with other media players.

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #24

                                  @Kinesis You need to change all your other slots for mediaPlayer in the same way as play():

                                  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;
                                      }
                                  });
                                  

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

                                  K 1 Reply Last reply
                                  1
                                  • jsulmJ jsulm

                                    @Kinesis You need to change all your other slots for mediaPlayer in the same way as play():

                                    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;
                                        }
                                    });
                                    
                                    K Offline
                                    K Offline
                                    Kinesis
                                    wrote on last edited by
                                    #25

                                    @jsulm
                                    I got a lambda issue for "m_playButton" . The message is " m_play Button in capture list does not name a variable.

                                    jsulmJ aha_1980A 2 Replies Last reply
                                    0
                                    • K Kinesis

                                      @jsulm
                                      I got a lambda issue for "m_playButton" . The message is " m_play Button in capture list does not name a variable.

                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on last edited by jsulm
                                      #26

                                      @Kinesis Please show your code...
                                      You need to put the code I shown AFTER you created m_playButton.

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

                                      K 1 Reply Last reply
                                      0
                                      • K Kinesis

                                        @jsulm
                                        I got a lambda issue for "m_playButton" . The message is " m_play Button in capture list does not name a variable.

                                        aha_1980A Offline
                                        aha_1980A Offline
                                        aha_1980
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #27

                                        @Kinesis I will tell you my insights from reading this thread: you should really take a C++ book and start with simple examples.

                                        you are lacking simple programming knowledge, sorry. most of your problems are not related to Qt.

                                        So please, start learning C++. it will help you a lot.

                                        Qt has to stay free or it will die.

                                        K 1 Reply Last reply
                                        0
                                        • aha_1980A aha_1980

                                          @Kinesis I will tell you my insights from reading this thread: you should really take a C++ book and start with simple examples.

                                          you are lacking simple programming knowledge, sorry. most of your problems are not related to Qt.

                                          So please, start learning C++. it will help you a lot.

                                          K Offline
                                          K Offline
                                          Kinesis
                                          wrote on last edited by
                                          #28

                                          @aha_1980
                                          Thanks for your suggestion . I am learning c++ now . I also like to try writing UI that's why I am approaching QT .

                                          1 Reply Last reply
                                          0

                                          • Login

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