基于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日");

  }