直接上代码
头文件
#pragma once
#include <QObject>
class QMediaPlayer;
class QMediaPlaylist;
#define SfPlayer MusicPlayer::GetInstance()
class MusicPlayer : public QObject
{
Q_OBJECT
private:
MusicPlayer(QObject *parent = nullptr);
public:
~MusicPlayer();
static MusicPlayer* GetInstance();
// 添加音乐
void addMusicMedia(QUrl);
// 设置当前播放歌曲
void setCurrentSong(int index);
// 获取当前播放索引
int getCurrentIndex();
// 播放歌曲
void playSong();
// 停止播放
void stopSong();
// 暂停播放
void puaseSong();
// 设置音量
void setVolumeValue(int);
// 获取当前音量
int getVolumeValue();
// 设置播放位置
void setPosition(qint64 position);
// 获取播放位置
qint64 getPosition();
// 获取时长
int getDuration();
// 清楚音乐列表
void clearMusicList();
signals:
void positionChanged(qint64 position);
void stateChanged(int stateType);
void currentIndexChanged(int index);
private:
QMediaPlayer* player = nullptr;
QMediaPlaylist* playList = nullptr;
};
cpp
#include "musicplayer.h"
#include "../data/SeeFmGui.h"
#include <QMediaPlayer>
#include <QMediaPlaylist>
MusicPlayer::MusicPlayer(QObject *parent)
: QObject(parent)
{
player = new QMediaPlayer(this);
player->seekableChanged(true);
playList = new QMediaPlaylist(this);
playList->setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
player->setPlaylist(playList);
connect(player,&QMediaPlayer::positionChanged,this,&MusicPlayer::positionChanged);
connect(player, &QMediaPlayer::stateChanged, this, &MusicPlayer::stateChanged);
connect(playList, &QMediaPlaylist::currentIndexChanged, this, &MusicPlayer::currentIndexChanged);
}
MusicPlayer::~MusicPlayer()
{
if (player)
{
delete player, player = nullptr;
}
if (playList)
{
delete playList, playList = nullptr;
}
}
MusicPlayer* MusicPlayer::GetInstance()
{
static MusicPlayer player;
return &player;
}
void MusicPlayer::addMusicMedia(QUrl url)
{
playList->addMedia(url);
}
void MusicPlayer::setCurrentSong(int index)
{
playList->setCurrentIndex(index);
}
int MusicPlayer::getCurrentIndex()
{
return playList->currentIndex();
}
void MusicPlayer::playSong()
{
player->play();
}
void MusicPlayer::stopSong()
{
player->stop();
}
void MusicPlayer::puaseSong()
{
player->pause();
}
void MusicPlayer::setVolumeValue(int vol)
{
player->setVolume(vol);
}
int MusicPlayer::getVolumeValue()
{
return player->volume();
}
void MusicPlayer::setPosition(qint64 position)
{
player->setPosition(position);
}
qint64 MusicPlayer::getPosition()
{
return player->position();
}
int MusicPlayer::getDuration()
{
return player->duration();
}
void MusicPlayer::clearMusicList()
{
playList->clear();
}