You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt标签显示视频时长始终为00:00:00问题求助

解决视频时长始终显示00:00:00的问题

问题根源

你直接调用player->duration()的时机不对——Qt媒体播放器刚打开文件时,还没完成媒体元数据的加载,此时duration()会返回-1(无效值),经过你的计算后就变成了00:00:00。你的时间计算逻辑没问题,但没跟上播放器的状态变化。

修复方案

1. 改用信号槽监听时长变化

别在打开文件后直接调用updateDurationInfo(player->duration()),而是通过Qt的信号槽机制,等播放器真正拿到时长后再更新:

在MainWindow的构造函数或初始化播放器的代码里添加这段连接:

connect(player, &QMediaPlayer::durationChanged, this, &MainWindow::updateDurationInfo);

这样播放器加载完媒体、获取到有效时长时,会自动触发updateDurationInfo函数,传入正确的时长值。

2. 确保媒体源设置正确

检查你设置媒体的代码是否正确,比如:

player->setMedia(QMediaContent(QUrl::fromLocalFile(yourFilePath)));

如果文件路径错误、文件损坏或格式不支持,播放器加载失败,duration()自然返回无效值。

3. 处理无效时长的情况

在updateDurationInfo里增加判断,避免显示错误的00:00:00:

void MainWindow::updateDurationInfo(qint64 duration) {
    if (duration <= 0) {
        ui->label->setText("未知时长");
        return;
    }
    int seconds = (duration/1000) % 60;
    int minutes = (duration/60000) % 60;
    int hours = (duration/3600000) % 24;
    QTime time(hours, minutes, seconds);
    ui->label->setText(time.toString());
}

4. 排查媒体加载错误

可以添加错误监听,确认是否存在媒体加载问题:

connect(player, &QMediaPlayer::errorOccurred, [this](QMediaPlayer::Error error) {
    qDebug() << "媒体加载错误:" << error;
});

内容的提问来源于stack exchange,提问作者stackhelpman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:15:49