QT 音乐播放器

利用三个信号槽实现进度条,播放时间,总时间显示

//监听播放进度的改变
connect(mediaPlayer, &QMediaPlayer::positionChanged,
        this, &Widget::updatePosition);

//监听播放时长的改变
connect(mediaPlayer, &QMediaPlayer::durationChanged,
        this, &Widget::updateDuration);

//监听进度条拖动
connect(ui->play_progress_hs, &QSlider::sliderMoved,
        this, &Widget::setPosition);

代码详解

  • positionChanged:当媒体播放进度(位置)发生变化时,QMediaPlayer发出此信号,连接到Widget类的updatePosition槽函数。
  • durationChanged:当媒体的总时长发生变化时,QMediaPlayer发出此信号,连接到Widget类的updateDuration槽函数。
  • sliderMoved:当用户拖动进度条时,QSlider发出此信号,连接到Widget类的setPosition槽函数。
  • 
    void Widget::updatePosition(qint64 position)
    {
        //position为时间偏移量
        ui->play_progress_hs->setValue(position);
        
        QTime currentTime(0,
                         (position / 60000) % 60,
                         (position / 1000 ) % 60
                         );
        ui->playback_duration_l->setText(currentTime.toString("mm:ss"));
    }
    
    void Widget::updateDuration(qint64 duration)
    {
        //播放时设置歌曲总时长
        ui->play_progress_hs->setRange(0, duration);
    
        QTime totalTime(0,
                        (duration / 60000) % 60,
                        (duration / 1000 ) % 60
                        );
        ui->total_duration_l->setText(totalTime.toString("mm:ss"));
    }
    
    void Widget::setPosition(int position)
    {
        mediaPlayer->setPosition(position);
    }

    QSlider 的长度和 position

    QSlider 的长度在视觉上表示进度条的长度,它不会直接影响 position,但它的最大值和最小值需要与 positionduration 相匹配,以便准确反映播放进度。

    positionduration

  • position:表示当前播放的位置,以毫秒为单位。
  • duration:表示媒体的总时长,以毫秒为单位。

QSlider 的长度(即其范围)不会直接影响播放的 position(位置)和 duration(时长),但它们需要同步来显示和控制媒体播放的位置和总时长。

1.当媒体的总时长发生变化时,updateDuration 函数会被调用。此函数执行以下操作:

  • 设置进度条范围ui->play_progress_hs->setRange(0, duration);

    • 将进度条的最小值设为 0,最大值设为媒体的总时长 duration。这样,进度条的范围与媒体播放时间同步,确保进度条的值能够精确反映播放进度。
  • 格式化总时长QTime totalTime(0, (duration / 60000) % 60, (duration / 1000 ) % 60 );

    • 将总时长 duration 转换为分钟和秒钟格式。duration / 60000 将毫秒转换为分钟,(duration / 1000 ) % 60 将毫秒转换为秒钟并取余60,确保秒钟在0到59之间。
  • 更新总时长标签ui->total_duration_l->setText(totalTime.toString("mm:ss"));

    • 将格式化后的时间字符串设置为总时长标签的文本,更新界面显示。

2.当媒体播放位置发生变化时,updatePosition 函数会被调用。此函数执行以下操作:

  1. 设置进度条值ui->play_progress_hs->setValue(position);

    • 将进度条的值设置为当前播放位置 position,使进度条的滑块反映当前的播放位置。
  2. 格式化当前播放时间QTime currentTime(0, (position / 60000) % 60, (position / 1000 ) % 60 );

    • 将当前播放位置 position 转换为分钟和秒钟格式。position / 60000 将毫秒转换为分钟,(position / 1000 ) % 60 将毫秒转换为秒钟并取余60,确保秒钟在0到59之间。
  3. 更新当前播放时间标签ui->playback_duration_l->setText(currentTime.toString("mm:ss"));

    • 将格式化后的时间字符串设置为当前播放时间标签的文本,更新界面显示。

3.当用户拖动进度条时,setPosition 函数会被调用。此函数执行以下操作:

  1. 设置媒体播放器的播放位置mediaPlayer->setPosition(position);
    • 将媒体播放器的播放位置设置为用户拖动进度条后的位置 position。这样,用户可以通过拖动进度条来控制播放进度。

视觉效果和功能同步

尽管 QSlider 的长度(即视觉上的长度)不会直接影响 positionduration,但其最大值和最小值需要与媒体的总时长和当前播放位置同步,以便准确反映和控制播放进度。这种同步确保了进度条的滑块位置能够精确反映媒体的当前播放进度,并且用户可以通过拖动滑块来控制播放位置。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu是一种基于Linux的操作系统,而Qt是一种跨平台的应用程序开发框架。因此,Ubuntu和Qt能够很好地结合在一起,用于开发各种应用程序,其中包括音乐播放器。 Ubuntu Qt 音乐播放器是一种能够在Ubuntu操作系统上运行的音乐播放软件。它基于Qt框架开发,因此具有跨平台的优势,可以在其他操作系统上运行,而不仅限于Ubuntu。这种播放器具有很多功能和特点。 首先,Ubuntu Qt 音乐播放器支持多种音频格式,包括MP3、WAV、FLAC等,用户可以根据自己的需求选择不同的格式进行播放。它还支持创建和管理播放列表,用户可以根据自己的喜好和需求来组织和播放音乐。 其次,这种音乐播放器还具有良好的用户界面设计,界面简洁直观,用户可以轻松地浏览和操作。它提供了播放、暂停、上一曲、下一曲等基本播放控制按钮,还可以通过拖动滑块来调整音乐的播放进度。 此外,Ubuntu Qt 音乐播放器还提供了一些额外的功能,例如歌词显示、音量调整、音频均衡器等。用户可以根据自己的需求进行设置和调整,以达到最佳音乐体验。 总而言之,Ubuntu Qt 音乐播放器是一种可在Ubuntu操作系统上运行的音乐播放软件,具有多种音频格式支持、良好的用户界面设计和一些额外的功能。通过这个播放器,用户可以方便地管理和播放自己喜欢的音乐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值