QT5 音樂(lè)播放器基本功能

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)度和音量,可以直接獲取并做其他操作。

  1. 創(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);
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容