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
QtWS25 Last Chance

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.
  • J jsulm
    3 Jul 2018, 05:28

    @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 3 Jul 2018, 06:27 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.

    J 1 Reply Last reply 3 Jul 2018, 06:33
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 3 Jul 2018, 06:31 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

      J 1 Reply Last reply 3 Jul 2018, 06:34
      2
      • K Kinesis
        3 Jul 2018, 06:27

        @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.

        J Offline
        J Offline
        jsulm
        Lifetime Qt Champion
        wrote on 3 Jul 2018, 06:33 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 3 Jul 2018, 06:41
        0
        • S SGaist
          3 Jul 2018, 06:31

          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.

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 3 Jul 2018, 06:34 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
          • J jsulm
            3 Jul 2018, 06:33

            @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 3 Jul 2018, 06:41 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 J 2 Replies Last reply 3 Jul 2018, 06:53
            0
            • K Kinesis
              3 Jul 2018, 06:41

              @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 3 Jul 2018, 06:53 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
                3 Jul 2018, 06:41

                @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 Offline
                J Offline
                jsulm
                Lifetime Qt Champion
                wrote on 3 Jul 2018, 06:54 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 3 Jul 2018, 07:18
                5
                • J jsulm
                  3 Jul 2018, 06:54

                  @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 3 Jul 2018, 07:18 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.

                  J 1 Reply Last reply 3 Jul 2018, 07:41
                  0
                  • K Kinesis
                    3 Jul 2018, 07:18

                    @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.

                    J Offline
                    J Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on 3 Jul 2018, 07:41 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 3 Jul 2018, 07:50
                    1
                    • J jsulm
                      3 Jul 2018, 07:41

                      @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 3 Jul 2018, 07:50 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.

                      J A 2 Replies Last reply 3 Jul 2018, 07:54
                      0
                      • K Kinesis
                        3 Jul 2018, 07:50

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

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 3 Jul 2018, 07:54 last edited by jsulm 7 Mar 2018, 07:55
                        #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 3 Jul 2018, 08:17
                        0
                        • K Kinesis
                          3 Jul 2018, 07:50

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

                          A Offline
                          A Offline
                          aha_1980
                          Lifetime Qt Champion
                          wrote on 3 Jul 2018, 07:57 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 3 Jul 2018, 08:01
                          0
                          • A aha_1980
                            3 Jul 2018, 07:57

                            @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 3 Jul 2018, 08:01 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
                            • J jsulm
                              3 Jul 2018, 07:54

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

                              K Offline
                              K Offline
                              Kinesis
                              wrote on 3 Jul 2018, 08:17 last edited by
                              #29

                              @jsulm
                              Here is the code

                              MainWindow::MainWindow(QWidget *parent) :
                                  QMainWindow(parent),
                                  ui(new Ui::MainWindow)
                              {
                                  ui->setupUi(this);
                                  
                                  ui->listWidget->setFlow(QListView::LeftToRight);
                                  ui->listWidget->setMinimumSize(1200,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();
                                      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);
                                      
                                      
                                      
                                      
                                      mediaPlayer->setVideoOutput(videoItem);
                                      player.append(mediaPlayer);
                                      scene->addItem(videoItem);
                                      
                                      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));
                                      
                                      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;
                                          }
                                      });
                                      
                                      
                                      //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                      //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                                      
                                      
                                      
                                      m_positionSlider = new QSlider(Qt::Horizontal);
                                      m_positionSlider->setRange(0, 0);
                                      
                                      
                                      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();
                              }
                              
                              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 D 2 Replies Last reply 3 Jul 2018, 08:30
                              0
                              • K Kinesis
                                3 Jul 2018, 08:17

                                @jsulm
                                Here is the code

                                MainWindow::MainWindow(QWidget *parent) :
                                    QMainWindow(parent),
                                    ui(new Ui::MainWindow)
                                {
                                    ui->setupUi(this);
                                    
                                    ui->listWidget->setFlow(QListView::LeftToRight);
                                    ui->listWidget->setMinimumSize(1200,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();
                                        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);
                                        
                                        
                                        
                                        
                                        mediaPlayer->setVideoOutput(videoItem);
                                        player.append(mediaPlayer);
                                        scene->addItem(videoItem);
                                        
                                        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));
                                        
                                        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;
                                            }
                                        });
                                        
                                        
                                        //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                        //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                                        
                                        
                                        
                                        m_positionSlider = new QSlider(Qt::Horizontal);
                                        m_positionSlider->setRange(0, 0);
                                        
                                        
                                        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();
                                }
                                
                                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 Offline
                                J Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on 3 Jul 2018, 08:30 last edited by
                                #30

                                @Kinesis And exactly this code does not build?

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

                                1 Reply Last reply
                                0
                                • K Kinesis
                                  3 Jul 2018, 08:17

                                  @jsulm
                                  Here is the code

                                  MainWindow::MainWindow(QWidget *parent) :
                                      QMainWindow(parent),
                                      ui(new Ui::MainWindow)
                                  {
                                      ui->setupUi(this);
                                      
                                      ui->listWidget->setFlow(QListView::LeftToRight);
                                      ui->listWidget->setMinimumSize(1200,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();
                                          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);
                                          
                                          
                                          
                                          
                                          mediaPlayer->setVideoOutput(videoItem);
                                          player.append(mediaPlayer);
                                          scene->addItem(videoItem);
                                          
                                          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));
                                          
                                          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;
                                              }
                                          });
                                          
                                          
                                          //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                                          //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                                          
                                          
                                          
                                          m_positionSlider = new QSlider(Qt::Horizontal);
                                          m_positionSlider->setRange(0, 0);
                                          
                                          
                                          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();
                                  }
                                  
                                  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);
                                  }
                                  
                                  D Offline
                                  D Offline
                                  Devopia53
                                  wrote on 3 Jul 2018, 08:38 last edited by
                                  #31

                                  @Kinesis

                                  Declare QPushButton as a local variable like a mediaPlayer. A lambda function can not capture member variables of this.

                                  A 1 Reply Last reply 3 Jul 2018, 08:41
                                  0
                                  • D Devopia53
                                    3 Jul 2018, 08:38

                                    @Kinesis

                                    Declare QPushButton as a local variable like a mediaPlayer. A lambda function can not capture member variables of this.

                                    A Offline
                                    A Offline
                                    aha_1980
                                    Lifetime Qt Champion
                                    wrote on 3 Jul 2018, 08:41 last edited by
                                    #32

                                    @Devopia53 No, it can:

                                    auto l = [this]() {
                                      // use members of this here
                                    }
                                    

                                    Qt has to stay free or it will die.

                                    D 1 Reply Last reply 3 Jul 2018, 11:24
                                    0
                                    • K Offline
                                      K Offline
                                      Kinesis
                                      wrote on 3 Jul 2018, 08:49 last edited by Kinesis 7 Mar 2018, 09:01
                                      #33

                                      @jsulm - Yes it does not work
                                      @Devopia53 - When I declare local variable , it works.
                                      @aha_1980 - I will also try like U said .
                                      Sorry for replying in the same reply . Because I am a new user . I can only post per every 600s

                                      1 Reply Last reply
                                      0
                                      • K Offline
                                        K Offline
                                        Kinesis
                                        wrote on 3 Jul 2018, 09:21 last edited by Kinesis 7 Apr 2018, 04:06
                                        #34

                                        I still have a question . I replaced the slider slots into loop but I can't control the sliders and sliders are not moving when the videos are running .
                                        Here is the slider code

                                        QSlider *m_positionSlider = new QSlider(Qt::Horizontal);
                                                m_positionSlider->setRange(0, 0);
                                        
                                               
                                                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(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                                        
                                                    mediaPlayer->setPosition(position);
                                                });
                                        
                                        
                                        J 1 Reply Last reply 3 Jul 2018, 10:27
                                        0
                                        • K Kinesis
                                          3 Jul 2018, 09:21

                                          I still have a question . I replaced the slider slots into loop but I can't control the sliders and sliders are not moving when the videos are running .
                                          Here is the slider code

                                          QSlider *m_positionSlider = new QSlider(Qt::Horizontal);
                                                  m_positionSlider->setRange(0, 0);
                                          
                                                 
                                                  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(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                                          
                                                      mediaPlayer->setPosition(position);
                                                  });
                                          
                                          
                                          J Offline
                                          J Offline
                                          jsulm
                                          Lifetime Qt Champion
                                          wrote on 3 Jul 2018, 10:27 last edited by jsulm 7 Mar 2018, 10:30
                                          #35

                                          @Kinesis What is this:

                                          connect(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                                          
                                                      mediaPlayer->setPosition(position);
                                                  });
                                          

                                          ?
                                          QMediaPlayer::setPosition() is a slot not a signal.
                                          I think you need to change the range

                                          m_positionSlider->setRange(0, 0);
                                          

                                          You can use http://doc.qt.io/qt-5/qmediaplayer.html#duration-prop to set the range.

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

                                          K 1 Reply Last reply 4 Jul 2018, 04:18
                                          1

                                          25/41

                                          3 Jul 2018, 07:50

                                          • Login

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