Я занимаюсь разработкой видеоплеера с использованием Qmediaplayer.
когда я устанавливаю метку для отображения длительности видео, она отображает неправильное значение.
float duration = mediaPlayer.duration() / 1000.0f;
ui->lblDuration->setText(QDateTime::fromTime_t(duration).toString("hh:mm:ss"));
Если я проигрываю видео, длительность которого составляет 7 минут, 24 секунды на этикетке отображается «05:37:24». На этикетке добавлено 5 часов и 30 минут, и я не могу найти причину.
Пожалуйста, помогите мне в этом, ребята …
Ну, я нашел другой способ сделать это. Немного долго, но работает отлично.
qint64 duration = mediaPlayer.duration();
int seconds = (duration/1000) % 60;
int minutes = (duration/60000) % 60;
int hours = (duration/3600000) % 24;
QTime time(hours, minutes,seconds);
ui->lblDuration->setText(time.toString());
Здесь я использовал qint64 как тип переменной, поэтому мне не нужно преобразовывать число с плавающей точкой в целое число (я использовал значение с плавающей точкой в своем вопросе).
Я использовал значения остатков, чтобы установить секунды, минуты и часы.
Пример: в часах я разделил длительность на 3600000. Что означает часы (60) * минуты (60) * миллисекунды (1000). Что дает мне точные часы, а затем получает остаток от 24 (дней), потому что, чтобы убедиться, что нет дней. (что на самом деле невозможно для видео, но чтобы убедиться).
Затем конвертируем их в Qtime (потому что мне нужно это в формате «чч: мм: сс»). Позже конвертировать в строку и отображать с помощью метки.
Других решений пока нет …