Pergunta

Estou desenvolvendo um player de vídeo usando o Qmediaplayer.quando defino um rótulo para mostrar a duração de um vídeo, ele exibe um valor errado.

float duration = mediaPlayer.duration() / 1000.0f;
ui->lblDuration->setText(QDateTime::fromTime_t(duration).toString("hh:mm:ss"));

Se eu reproduzir um vídeo em que a duração é de 7 minutos e a etiqueta de 24 segundos mostra "05:37:24", há 5 horas e 30 minutos são adicionados ao rótulo e não consigo encontrar um motivo.Por favor me ajudem nisso pessoal...

Foi útil?

Solução

Bem, eu encontrei outra maneira de fazer isso.Um pouco longo, mas funciona perfeitamente.

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

Aqui eu usei qint64 como tipo de variável, então não preciso converter float em inteiro (usei o valor float em minha pergunta).Usei valores restantes para definir segundos, minutos e horas.Exemplo:em horas, dividi a duração em 3600000.O que significa horas(60) * minutos(60) * milissegundos(1000).O que me dá as horas exatas e depois o restante de 24 (dias) para ter certeza de que não há dias.(o que realmente não é possível para um vídeo, mas para ter certeza).

Em seguida, convertê-los para Qtime (porque preciso disso no formato "hh:mm:ss").Posteriormente, converta em string e seja exibido usando um rótulo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top