一、播放按钮处理
根据歌曲播放的状态,切换播放按钮的图标:
-
播放状态
-
非播放状态
[signal] void QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)
Signals that the status of the current media has changed.

[signal] void QMediaPlayer::stateChanged(QMediaPlayer::State state)
Signal the state of the Player object has changed.

class MusicItem : public QObject,public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(qreal angle READ rotation WRITE setRotation)
public:
void resumeAnimation(void);
};
void MusicItem::resumeAnimation()
{
if(animation->state() == QPropertyAnimation::Paused){
animation->resume();
}
}
class MusicSence : public QObject
{
Q_OBJECT
public:
void stopAnimation(void);
void resumeAnimation(void);
};
void MusicSence::stopAnimation()
{
diskItem->pauseAnimation();
needleItem->pauseAnimation();
}
void MusicSence::resumeAnimation()
{
diskItem->resumeAnimation();
needleItem->resumeAnimation();
}
class CloudMusicWindow : public QMainWindow
{
private slots:
void handlePlayerState(QMediaPlayer::State state);
void on_playButton_clicked();
};
CloudMusicWindow::CloudMusicWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::CloudMusicWindow)
{
musicPlayer = new MusicPlayer(this);
connect(musicPlayer,&MusicPlayer::stateChanged,
this,&CloudMusicWindow::handlePlayerState);
}
void CloudMusicWindow::handlePlayerState(QMediaPlayer::State state)
{
if(state == QMediaPlayer::PlayingState){
ui->playButton->setProperty("state","Playing");
}else{
ui->playButton->setProperty("state","NoPlaying");
musicSence->stopAnimation();
}
ui->playButton->style()->unpolish(ui->playButton);
ui->playButton->style()->polish(ui->playButton);
ui->playButton->update();
}
void CloudMusicWindow::on_playButton_clicked()
{
if(musicPlayer->state() == QMediaPlayer::PlayingState){
musicPlayer->pause();
}else{
if(musicPlayer->state() == QMediaPlayer::PausedState){
musicSence->resumeAnimation();
}else{
musicSence->startAnimation();
}
musicPlayer->play();
}
}
二、上一首、下一首按钮处理
class CloudMusicWindow : public QMainWindow
{
public:
void playTableMusic(QTableWidget *musicTable,int row);
private slots:
void on_tabWidget_currentChanged(int index);
private:
QTableWidget *musicTable;
};
CloudMusicWindow::CloudMusicWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::CloudMusicWindow)
{
ui->tabWidget->setCurrentIndex(1);
musicTable = ui->networkMusicTable;
initMusicTable(ui->networkMusicTable);
}
void CloudMusicWindow::on_tabWidget_currentChanged(int index)
{
musicTable = index ? ui->networkMusicTable : ui->localMusicTable;
}
void CloudMusicWindow::playTableMusic(QTableWidget *musicTable, int row)
{
QString mp3Url = musicTable->item(row,0)->text();
QString lyricUrl = musicTable->item(row,1)->text();
QString albumUrl = musicTable->item(row,2)->text();
qDebug() << "mp3Url:" << mp3Url;
playMusic(QStringList()<< mp3Url << lyricUrl << albumUrl);
return;
}
//下一首按钮处理
void CloudMusicWindow::on_nextMusicButton_clicked()
{
int totalRow = musicTable->rowCount();
if(!totalRow){
return;
}
int currentRow = musicTable->currentRow();
int row = currentRow < totalRow - 1 ? currentRow + 1 : 0;
musicTable->selectRow(row);
playTableMusic(musicTable,row);
return;
}
//上一首歌处理
void CloudMusicWindow::on_preMusicButton_clicked()
{
int totalRow = musicTable->rowCount();
if(!totalRow){
return;
}
int currentRow = musicTable->currentRow();
int row = currentRow > 0 ? currentRow - 1 : totalRow - 1;
musicTable->selectRow(row);
playTableMusic(musicTable,row);
return;
}
三、随机播放按钮处理
class CloudMusicWindow : public QMainWindow
{
public:
void handlePlayerMediaStatus(QMediaPlayer::MediaStatus status);
private slots:
void on_randMusicButton_clicked();
};
CloudMusicWindow::CloudMusicWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::CloudMusicWindow)
{
musicPlayer = new MusicPlayer(this);
connect(musicPlayer,&MusicPlayer::mediaStatusChanged,
this,&CloudMusicWindow::handlePlayerMediaStatus);
}
void CloudMusicWindow::handlePlayerMediaStatus(QMediaPlayer::MediaStatus status)
{
if(status == QMediaPlayer::EndOfMedia){
bool rand = ui->randMusicButton->property("rand").toBool();
if(rand){
int totalLine = musicTable->rowCount();
if(totalLine){
int row = qrand() % totalLine;
playTableMusic(musicTable,row);
}
}
}
return;
}
void CloudMusicWindow::on_randMusicButton_clicked()
{
bool rand = ui->randMusicButton->property("rand").toBool();
if(rand){
ui->randMusicButton->setProperty("rand","false");
}else{
ui->randMusicButton->setProperty("rand","true");
}
ui->randMusicButton->style()->unpolish(ui->randMusicButton);
ui->randMusicButton->style()->polish(ui->randMusicButton);
ui->randMusicButton->update();
return;
}
1027

被折叠的 条评论
为什么被折叠?



