基于QT实现本地音乐播放器
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
#include
//#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setFixedSize(this->geometry().size()); //设置固定大小
this->setWindowFlag(Qt::FramelessWindowHint); //关闭窗口标题
//定义一个媒体播放对象
mediaplayer = new QMediaPlayer(this);
//设置音量
mediaplayer->setVolume(50);
//获取当前文件总播放时间
connect(mediaplayer,&QMediaPlayer::durationChanged,this,[=](qint64 duration)
{
ui->total_playtime->setText(QString("%1:%2").arg(duration/1000/60,2,10,QChar('0')).arg(duration/1000%60,2,10,QChar('0')));//2为位宽,10为进制,QChar('0')为填充0
ui->play_slider->setRange(0,duration);
});
//根据进度改变当前播放时间
connect(mediaplayer,&QMediaPlayer::positionChanged,this,[=](qint64 position)
{
ui->now_playtime->setText(QString("%1:%2").arg(position/1000/60,2,10,QChar('0')).arg(position/1000%60,2,10,QChar('0')));//2为位宽,10为进制,QChar('0')为填充0
ui->play_slider->setValue(position);
});
//拖动滑块,让音乐进度随滑块改变而改变
connect(ui->play_slider,&QSlider::sliderMoved,mediaplayer,&QMediaPlayer::setPosition);
//拖动滑块,改变音量
connect(ui->volume_slider,&QSlider::sliderMoved,mediaplayer,&QMediaPlayer::setVolume);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent*) //重新定义画布
{
QPainter paint(this);
paint.drawPixmap(0,0,width(),height(),QPixmap(":image/picture/background.jpg"));
}
void Widget::on_openfile_pb_clicked() //打开文件按钮按下
{
//QMessageBox::information(this,"文件","打开文件");
//打开对话框,让用户选择音乐的存放路径
auto path=QFileDialog::getExistingDirectory(this,"选择音乐所在的路径","c:/Users/***/Desktop/music_path"); //打开指定文件夹
// qInfo()< QDir dir(path); // auto musiclist=dir.entryList(QStringList()<<"*.mp3"<<"*.wav"); //筛出mp3和wav文件 // qInfo()< //把筛选出的文件在listwidget显示出来 ui->listWidget->addItems(musiclist); //默认选择第一首音乐 ui->listWidget->setCurrentRow(0); //把音乐完整路径保存起来 for(auto file : musiclist) playlist.append(QUrl::fromLocalFile(path+"/"+file)); //append附加 // qInfo()< } void Widget::on_playorpause_pb_clicked() //播放或者暂停按下 { if(mediaplayer->state()!=QMediaPlayer::PlayingState) //不处于播放状态 { //得到音乐索引 int index=ui->listWidget->currentRow(); //设置音乐路径 mediaplayer->setMedia(playlist[index]); } //判断当前状态 switch(mediaplayer->state()) { case QMediaPlayer::StoppedState:mediaplayer->play();break; case QMediaPlayer::PausedState:mediaplayer->play();break; //停止则播放 case QMediaPlayer::PlayingState:mediaplayer->pause();break; //正在播放则暂停 // default:mediaplayer->play();break; } } void Widget::on_lastsong_pb_clicked() //上一首 { int index=ui->listWidget->currentRow(); if(index==0) //如果在第一行 ui->listWidget->setCurrentRow(ui->listWidget->count()-1); else ui->listWidget->setCurrentRow(index-1); mediaplayer->setMedia(playlist[ui->listWidget->currentRow()]); mediaplayer->play(); } void Widget::on_next_song_pb_clicked() //下一首 { int index=ui->listWidget->currentRow(); if(index == (ui->listWidget->count()-1)) //如果在最后一首歌 ui->listWidget->setCurrentRow(0); else ui->listWidget->setCurrentRow(index+1); mediaplayer->setMedia(playlist[ui->listWidget->currentRow()]); mediaplayer->play(); } void Widget::on_listWidget_doubleClicked(const QModelIndex &index) //双击播放指定音乐 { mediaplayer->setMedia(playlist[index.row()]); mediaplayer->play(); } void Widget::on_close_pb_clicked() //离开按钮按下 { close(); } void Widget::on_about_pb_clicked() //关于按钮按下 { QMessageBox::about(this,"关于","应用:本地音乐播放器 版本:1.0.0.0 制作人:GrassFishStudio 时间:2024年3月7日"); }