QT实现简单音乐播放器

2020-06-30 19:00:37丽君

videoplayer.h代码如下(视频播放和音乐播放差不多):

#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H

#include <QDialog>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>
#include <QTime>
#include <QTimer>

namespace Ui {
class VideoPlayer;
}

class VideoPlayer : public QDialog
{
  Q_OBJECT

public:
  explicit VideoPlayer(QWidget *parent = nullptr);
  ~VideoPlayer();

public slots:
  void init();
  void slotButtonStart();
  void slotstop();
  void closeEvent(QCloseEvent *);
  void volumChange(int);
  void positionChange(qint64 position);
  void seekChange(int position); //滑动滑动条快进、倒退音乐,且音乐已播放时长也跟着变化
  void videoTime();
  void changestartbutton();
  void button_style();
  void mute();

private:
  QMediaPlayer* player;
  QVideoWidget* videoWidget;
  QMediaPlaylist* playlist;
  Ui::VideoPlayer *ui;
  bool isPlay_wm=false;
  bool ismute=false;
  int  moved;

};

#endif // VIDEOPLAYER_H

videoplayer.cpp代码如下:

#include "videoplayer.h"
#include "ui_videoplayer.h"
#include <QDebug>
#include <QFile>
#include <QCloseEvent>

VideoPlayer::VideoPlayer(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::VideoPlayer)
{
  ui->setupUi(this);
  qDebug()<<"执行到此处";
  connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::changestartbutton);
  connect(ui->Buttonmute,&QPushButton::clicked,this,&VideoPlayer::mute);
  init();
  connect(ui->Buttonstart,&QPushButton::clicked,this,&VideoPlayer::slotButtonStart);
  connect(ui->voiceSlider, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));
  connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(positionChange(qint64)));
  connect(ui->timeSlider,SIGNAL(sliderMoved(int)),this,SLOT(seekChange(int)));
  connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(videoTime()));
}

VideoPlayer::~VideoPlayer()
{
  slotstop();
  delete ui;
}

void VideoPlayer::init(){
  //widget=new QWidget;
  button_style();
  player= new QMediaPlayer;
  videoWidget=new QVideoWidget;
  playlist=new QMediaPlaylist;
  playlist->clear();
  playlist->addMedia(QUrl::fromLocalFile("C:Users44637MusicMV陈奕迅-我们MV.mp4"));
  player->setPlaylist(playlist);

  QFile file("C:Users44637MusicMV陈奕迅-我们MV.mp4");
  if(!file.open(QIODevice::ReadOnly))
    qDebug() << "Could not open file";

  player->setVideoOutput(videoWidget);
  player->setPlaylist(playlist);
  videoWidget->setAutoFillBackground(true);
  QPalette qplte;
  qplte.setColor(QPalette::Window, QColor(0,0,0));
  videoWidget->setPalette(qplte);
  ui->verticalLayout->addWidget(videoWidget);
  player->play();
  isPlay_wm=true;
}

void VideoPlayer::slotButtonStart(){

  if(!isPlay_wm){
    isPlay_wm=true;
    //Player->setVolume(100);
    player->play();
    //musicTime();
    //qApp->quit();

  }
  else{
    isPlay_wm=false;
    player->pause();
    //musicTime();
  }

}

void VideoPlayer::slotstop(){
  player->stop();
  playlist->clear();
  //player->
}

void VideoPlayer::closeEvent(QCloseEvent *event){
  slotstop();
  event->accept();
}

void VideoPlayer::volumChange(int vol)
{
  player -> setVolume(vol);
}

void VideoPlayer::positionChange(qint64 position)
{
  ui->timeSlider->setMaximum(player->duration() / 1000);//设置滑块的长度范围为音乐长.00度
  ui->timeSlider->setValue(position / 1000);//如果音乐进度改变,则改变滑块显示位置
  moved = position;//让播放时间等于音乐进度(毫秒)
  QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间
  ui->currenttime ->setText(moveTime.toString("mm:ss"));//显示时间
  QString t=moveTime.toString("mm:ss");
  QString mm = t.mid(0,2);
  QString ss = t.mid(3, 2);
  int m = mm.toInt();
  int s = ss.toInt();
  int time = m*60*1000 + s*1000;
  qDebug()<<"int"<<time;
}

void VideoPlayer::seekChange(int position)
{
  player -> setPosition(position * 1000);//如果滑块改变位置,则改变音乐进度
  moved = position * 1000;//让播放时间等于音乐进度(毫秒)
  QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间
}

void VideoPlayer::videoTime(){

        qint64 time = player->duration();
        QTime Time(0,(time % (1000 * 60 * 60)) / (1000 * 60),(time % (1000 * 60)) / 1000);
          ui->videotime->setText(Time.toString("mm:ss"));
        qDebug()<<"time:"<<Time;
}


void VideoPlayer::changestartbutton(){
  if(!isPlay_wm)
  ui->Buttonstart->setIcon(QIcon("E:QTQTcodeMusicPlayericonpause.jpg"));
  else
  ui->Buttonstart->setIcon(QIcon("E:QTQTcodeMusicPlayericonstart.jpg"));
}

void VideoPlayer::button_style(){
  ui->Buttonstart->setIcon(QIcon("E:QTQTcodeMusicPlayericonpause.jpg"));
  ui->Buttonmute->setIcon(QIcon("E:QTQTcodeMusicPlayericonvolume.jpg"));
}

void VideoPlayer::mute(){
  if(!ismute){
  player -> setVolume(0);
  ui->Buttonmute->setIcon(QIcon("E:QTQTcodeMusicPlayericonmute.png"));
  ismute=true;
  }
  else{
  player -> setVolume(100);
  ui->Buttonmute->setIcon(QIcon("E:QTQTcodeMusicPlayericonvolume.jpg"));
  ismute=false;
  }
}