#include
#include \#include \
#define TIME_MS_DURATION 1000 #define INIT_SYSTEM_VOLUME 50
enum PlaybackMode //播放模式 {
CURRENT_ITEM_ONCE = 0, //单曲播放 CURRENT_ITEM_IN_LOOP = 1, //单曲循环 SEQUENTIAL = 2, //顺序播放 LOOP = 3, //列表循环 RANDOM = 4 //随机播放
};
class MusicPlayer : public QObject {
Q_OBJECT
signals:
void signalPositionChanged(QString updateTime); void signalDurationChanged(qint64 duration);
public slots:
void slotPositionChanged(qint64 position); void slotDurationChanged(qint64 duration);
public:
explicit MusicPlayer(QObject *parent = 0);
const qint64 getTotalPlayerTime(void) const; void setTotalPlayerTime(const qint64 time);
const qint64 getCurrentPlayerTime(void) const; void setCurrentPlayerTime(const qint64 time);
/// 歌曲播放逻辑
QMediaPlayer ¤tMediaPlayer(void);
/// 歌曲列表获取逻辑
QMediaPlaylist &musicPlayList(void); QStringList &songsNameList(void);
/// 歌曲歌词获取逻辑
void getCurrentSongLyric(void);
QList
private:
/// 歌曲播放逻辑
qint64 m_totalPlayerTime; qint64 m_currentPlayerTime; QMediaPlayer m_player;
/// 歌曲列表获取逻辑
SongsFile *m_songsFile;
QMediaPlaylist m_musicPlayList; QStringList m_songsNameList;
/// 歌曲歌词获取逻辑
QList
#endif // MUSICPLAYER_H
(2).cpp文件
musicplayer.cpp的头文件如下:
#include \
#include
#include \
同时在cpp文件写入了信号与槽传值连接的方法,代码如下:
MusicPlayer::MusicPlayer(QObject *parent) : QObject(parent) {
m_songsFile = new SongsFile(this);
m_songsFile->initSongsListAndSongsNameList(m_musicPlayList, m_songsNameList);
m_player.setPlaylist(&m_musicPlayList); m_player.setVolume(INIT_SYSTEM_VOLUME);
connect(&m_player, SIGNAL(durationChanged(qint64)), this, SLOT(slotDurationChanged(qint64))); connect(&m_player, SIGNAL(positionChanged(qint64)), this, SLOT(slotPositionChanged(qint64))); }
得到siganl后相应执行的槽函数(position),具体代码如下:
void MusicPlayer::slotPositionChanged(qint64 position) {
m_currentPlayerTime = position / TIME_MS_DURATION; //歌曲进度条显示
QTime currentTime((m_currentPlayerTime/3600)`, (m_currentPlayerTime/60)`,
m_currentPlayerTime`, (m_currentPlayerTime*1000)00);
QTime totalTime((m_totalPlayerTime/3600)`, (m_totalPlayerTime/60)`,
m_totalPlayerTime`, (m_totalPlayerTime*1000)00);
QString updateTime = currentTime.toString(\ + \
emit signalPositionChanged(updateTime); }
void MusicPlayer::slotDurationChanged(qint64 duration) {
m_totalPlayerTime = duration / TIME_MS_DURATION; //TIME_MS_DURATION 1000
emit signalDurationChanged(m_totalPlayerTime); }
以及对播放时间、播放列表等的声明,代码如下:
const qint64 MusicPlayer::getTotalPlayerTime(void) const {
return m_totalPlayerTime / TIME_MS_DURATION; //INIT_SYSTEM_VOLUME 50 }
void MusicPlayer::setTotalPlayerTime(const qint64 time) {
m_totalPlayerTime = time; }
const qint64 MusicPlayer::getCurrentPlayerTime(void) const {
return m_currentPlayerTime; }
void MusicPlayer::setCurrentPlayerTime(const qint64 time) {
m_currentPlayerTime = time;