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"));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33033059/article/details/106020955