3
votes

I am new to Qt and I am using QMediaPlayer in one of my GUI projects and I want to stop the loaded video at a certain position X (input from user on a Line Edit) how would I be able to do this? I know I am able to set a starting position just by doing player->setPosition(Y) where Y is an integer but what about an ending position?

1

1 Answers

2
votes

One lesser option would be to use position() which returns the current position as a qint64 - if you call the play() method for your QMediaPlayer then use something like

  while (player.position() < input) {}
  player.stop();     // Or player.pause();

it will wait until the input position is reached. But the drawback to that approach is the blocking while loop and without knowing the intended application I don't know if that would be appropriate. It is probably better to use the QMediaPlayer::positionChanged signal (which is emitted based on the QMediaPlayer's notifyInterval), something like

  connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(checkPosition());

where it is assumed this is the receiver and both player and input are scoped such that they are available to the slot checkPosition(). checkPosition() then looks something like

  checkPosition() {
      if (player.position() > input()) {
          player.stop();     // Or player.pause();
      }
  }

Of course you can also pass the player and the input to the checkPosition() slot but I neglected that for simplicity. Hope this helps.