【QT】实现本地音乐播放器

【说明】最近在写一个音乐播放器,大概花了两天时间完成了基本功能,包括本地音乐的打开、播放、收藏等。后续想完善音乐列表(借助sqlite数据库)、网络音乐(借助网易云API接口)功能,先上初步UI效果图。

播放器UI界面
一、UI界面
(1)Icon图标:Qt的button充满了工业风,所以还是要美化一下的,推荐阿里巴巴矢量图库,高端、齐全、免费。
(2)背景:这个随便,为了显得简洁大方,可以把所有窗口设置为透明

二、基本功能

我非常痛恨一上来就贴一堆代码,代码永远都是最好写的,框架和细节才最重要,所谓大刀阔斧绣花针。框架可以看别人的,细节要自己品。

(1)环境支持:可能遇到无法打开音频的错误,原因是PC端缺少音频支持,可下载LAVFilters软件解决。
(2)功能块:功能基本是围绕几个重要的类来实现。

功能
QMediaPlayer音频文件操作(打开、播放等)支持
QFileDialog本地文件访问支持
QStandardPaths本地路径
QListWidgetItem制作音乐列表
QSqlQuery、QSqlDatabase数据库支持

具体怎么实现,要去查Qt帮助文档,少百度、熟练使用【F1查看】是Qt入门学习者的灵魂。简单贴一下代码。

先列出基本功能模块

private slots:
    void addFile();//添加歌曲文件
    void Play_Song();//播放歌曲
    void Next_Song();//下一曲播放
    void Last_Song();//上一曲播放
    void Like_Song();//收藏
    void seekChange();//滑动条控制歌曲进度
    void positionChange(qint64 position);//歌曲进度控制进度条
    void updateState(QMediaPlayer::State state);//音频状态更新,改变播放图标
    void volumChange();//音量控制
    void on_voiceButton_clicked();//声音控制

打开音乐文件

void MusicPlayer::addFile()
{

    const QStringList musicPaths = QStandardPaths::standardLocations(QStandardPaths::MusicLocation);
    const QString filePath =
            QFileDialog::getOpenFileName(this, tr("本地音乐"),
                                         musicPaths.isEmpty() ? QDir::homePath() : musicPaths.first(),
                                         tr("*.mp3;;*.*"));
    Path = filePath;
    player->setMedia(QUrl::fromLocalFile(Path));
    if (!filePath.isEmpty())
    {
        ui->music_label->setText(QFileInfo(filePath).fileName());
    }
}

播放音频

void MusicPlayer::Play_Song()
{
    if(player->state() == QMediaPlayer::PlayingState){
        player->pause();
    }else{
        player->play();
    }
}

音乐进度控制

void MusicPlayer::seekChange()
{
    int position = ui->timeSlider->value();
    player -> setPosition(position * 1000);//如果滑块改变位置,则改变音乐进度
    qint64 moved = position;//让播放时间等于音乐进度(毫秒)
    QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置当前时间
    ui->spendlabel->setText(moveTime.toString("mm:ss"));
}
void MusicPlayer::positionChange(qint64 position)
{
    ui->timeSlider->setMaximum(player->duration() / 1000);//设置滑块的长度范围为音乐长
    ui->timeSlider->setValue(position/1000);//如果音乐进度改变,则改变滑块显示位置

    qint64 length = player->duration();
    QTime totalTime(0,(length/60000) % 60,(length / 1000) % 60);//设置总时间
    ui->totallabel->setText(totalTime.toString("mm:ss"));

    qint64 moved = position;//让播放时间等于音乐进度(毫秒)
    QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置当前时间
    ui->spendlabel->setText(moveTime.toString("mm:ss"));

}

音量控制

void MusicPlayer::on_voiceButton_clicked()//静音键
{
    ui->voiceSlider->setValue(0);
    player->setVolume(0);
    ui->voiceButton->setIcon(QIcon(":/Resources/icon/静音.svg"));
}
void MusicPlayer::volumChange()//声音滑块
{
    player->setVolume(ui->voiceSlider->value());
    if(ui->voiceSlider->value() != 0){
        ui->voiceButton->setIcon(QIcon(":/Resources/icon/音量.svg"));
    }
    else{
        ui->voiceButton->setIcon(QIcon(":/Resources/icon/静音.svg"));
    }
}
  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

外来务工人员徐某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值