QT5實(shí)現(xiàn)音樂(lè)播放器是十分簡(jiǎn)單的慎王,因?yàn)閮?nèi)部已經(jīng)封裝好了 QMediaPlayer 和 QMediaPlaylist津函。通過(guò)QMediaPlaylist加入歌曲庞溜,形成歌曲列表张抄,再把列表加入到QMediaPlayer 中去砂蔽。然后直接通過(guò)QMediaPlayer 的函數(shù)來(lái)實(shí)現(xiàn)對(duì)音樂(lè)的基本操作。QMediaPlayer 還提供了一些信號(hào)署惯,比如進(jìn)度和音量察皇,可以直接獲取并做其他操作。
- 創(chuàng)建播放器對(duì)象和加入播放列表。
QMediaPlayer *player; //音樂(lè)播放器
QMediaPlaylist *playList; //音樂(lè)播放列表
playList=new QMediaPlaylist;
playList->setPlaybackMode(QMediaPlaylist::Random);
player=new QMediaPlayer;
player->setPlaylist(playList);
添加本地音樂(lè)什荣。
connect(ui->pushButton_add, SIGNAL(clicked()), this, SLOT(slot_importLocalSongs()));
void Body::slot_importLocalSongs()
{
QString initialName=QDir::homePath();
QStringList pathList=QFileDialog::getOpenFileNames(this, tr("選擇文件"), initialName, tr("*.mp3"));
for(int i=0; i<pathList.size(); ++i) {
QString path=QDir::toNativeSeparators(pathList.at(i));
if(!path.isEmpty()) {
playList->addMedia(QUrl::fromLocalFile(path));
QString fileName=path.split("\").last();
int rownum=ui->tableWidget_music->rowCount();
ui->tableWidget_music->insertRow(rownum);
ui->tableWidget_music->setItem(rownum, 0, new QTableWidgetItem(fileName.split(".").front()));
}
}
}播放或暫停音樂(lè)矾缓。
connect(ui->pushButton_play, SIGNAL(clicked()), this, SLOT(slot_playOrPause()));
void Body::slot_playOrPause()
{
if(ui->pushButton_play->text()==tr(">"))
{
player->play();
ui->pushButton_play->setText(tr("||"));
}
else
{
player->pause();
ui->pushButton_play->setText(tr(">"));
}
}-
播放上一首。
connect(ui->pushButton_pre, SIGNAL(clicked()), this, SLOT(slot_playPrev()));
void Body::slot_playPrev()
{
int currentIndex = playList->currentIndex();
if(--currentIndex<0)
currentIndex = ui->tableWidget_music->rowCount() - 1;
playList->setCurrentIndex(currentIndex);
player->play();//高亮 ui->tableWidget_music->selectRow(currentIndex); ui->tableWidget_music->setFocus(Qt::MouseFocusReason); }
-
播放下一首稻爬。
connect(ui->pushButton_next, SIGNAL(clicked()), this, SLOT(slot_playNext()));
void Body::slot_playNext()
{
int currentIndex=playList->currentIndex();
if(++currentIndex==playList->mediaCount())
currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();//高亮 ui->tableWidget_music->selectRow(currentIndex); ui->tableWidget_music->setFocus(Qt::MouseFocusReason); }
進(jìn)度條設(shè)置
connect(ui->slider_duration, SIGNAL(sliderMoved(int)), this, SLOT(slot_setPosition_duration(int)));
void Body::slot_setPosition_duration(int position)
{
player->setPosition(position);
}音量設(shè)置
connect(ui->slider_volume, SIGNAL(valueChanged(int)), this, SLOT(slot_setPosition_volume(int)));
void Body::slot_setPosition_volume(int volume)
{
if(flag_slience) //如果是靜音的
{
ui->pushButton_silence->setText("off"); //標(biāo)識(shí)設(shè)為靜音
flag_slience = false; //標(biāo)識(shí)設(shè)為非靜音
}
player->setVolume(volume); //設(shè)置播放器的
ui->slider_volume->setValue(volume);
}