最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt5+QMediaPlayer實現(xiàn)音樂播放器的示例代碼

 更新時間:2022年12月12日 10:35:35   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細(xì)介紹了如何利用Qt5和QMediaPlayer實現(xiàn)簡易的音樂播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下

1、先上效果圖

好了,現(xiàn)在講講我是怎么寫的吧,首先最基本的播放歌曲代碼應(yīng)該就是:

好了,現(xiàn)在講講我是怎么寫的吧,首先最基本的播放歌曲代碼應(yīng)該就是:

QMediaPlayer  *music = new QMediaPlayer(this);//初始化音樂
 
QMediaPlaylist *playlist = new QMediaPlaylist(this);//初始化播放列表
 
playlist->setPlaybackMode(QMediaPlaylist::Loop);//設(shè)置播放模式(順序播放,單曲循環(huán),隨機(jī)播放等)
 
playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm.mp3"));//添加歌曲,這里添加的是歌曲的路徑
 
playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm2.mp3"));//添加歌曲,這里添加的是歌曲的路徑
 
music->setPlaylist(playlist);  //設(shè)置播放列表
music->play();//播放歌曲

這樣就能按播放列表來播放了

然后playlist里面的歌曲是看不到的,就需要一個列表來顯示歌曲,我用的是QListWidget,這樣的話,只需要把列表項與playlist里面的歌曲對應(yīng)上就可以了,然后要保存歌曲,數(shù)據(jù)庫自然就少不了了,可以用Qt自帶的數(shù)據(jù)庫QSQLITE,然后創(chuàng)建數(shù)據(jù)庫和表,寫個函數(shù)

static bool CreatConnection()
{
 
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");//建庫
db.setDatabaseName("mymusic.db");//給數(shù)據(jù)庫起名字
if(!db.open())
{
    return false;
}
QSqlQuery query;
 query.exec(QString("create table LocalMusic (id int,MusicName varchar,FileName varchar,     primary key(id,MusicName,FileName))"));//本地音樂列表數(shù)據(jù),把歌曲名和歌曲路徑給存起來
return true;
}

在main函數(shù)中先執(zhí)行這個函數(shù),創(chuàng)建個數(shù)據(jù)庫即可。

添加歌曲:

QListWidget *list = new QListWidget(this);
QSqlQuery query;
 
QStringList list=QFileDialog::getOpenFileNames(this,QString::fromLocal8Bit("文
件"),currentFileName[1],QString::fromLocal8Bit("音頻文件(*.mp3)"));//用個文件登陸框來選擇.mp3文件,包括多個文件
 
if(!list.isEmpty()){
 
for(int i=0;i<list.size();i++){
 
QString path=QDir::toNativeSeparators(list.at(i));
 
playlist->addMedia(QUrl::fromLocalFile(path));
QString Name=path.split("\\").last();
QListWidgetItem *item = new QListWidgetItem(QIcon("圖片.png"),Name);
item->setToolTip(Name);
list->addItem(item);
query.exec(QString("insert into values(%1,'%2','%3')").arg(i).arg(Name).arg(path);
 
}
 
}

這樣就列表上就可以顯示歌曲了,并且把歌曲信息保存到數(shù)據(jù)庫里了,可以在初始化的時候把數(shù)據(jù)庫的歌名添加到列表中即list,把歌曲路徑添加到播放列表中即playlist,但是顯示的歌曲如果太多就會出現(xiàn)滾動條,默認(rèn)的滾動條貌似不是很好看,可以用一下代碼美化滾動條

QString listWidgetStyle = "QScrollBar:vertical"
                                  "{"
                                      "width:8px;"
                                      "background-color:transparent;"
                                      "margin:0px,0px,0px,0px;"
                                     " padding-top:12px;   /*上預(yù)留位置*/"
                                     " padding-bottom:12px;    /*下預(yù)留位置*/"
                                  "}"
 
 
                                 "QScrollBar::handle:vertical"
                                 " {"
                                 "     width:8px;"
                                 "     background-color:rgba(255,255,255,0.2);"
                                 "     border-radius:4px;"
                                 "     min-height:20px;"
                                 " }"
 
 
                                 "QScrollBar::handle:vertical:hover"
                                 "{"
                                 "    width:9px;"
                                 "    background-color:rgba(255,255,255,0.5);"
                                 "    border-radius:4px;"
                                 "    min-height:20;"
                                 "}"
 
                                 "QScrollBar::add-line:vertical"
                                 "{"
                                 "     height:12px;"
                                 "     width:10px;"
                                 "     border-image:url(:/selectfile/scroll/3.png);"
                                 "     subcontrol-position:bottom;"
                                 "}"
 
                                 "QScrollBar::sub-line:vertical"
                                 "{"
                                 "     height:12px;"
                                 "     width:10px;"
                                 "     border-image:url(:/selectfile/scroll/1.png);"
                                 "     subcontrol-position:top;"
                                 "}"
                                 "QScrollBar::add-line:vertical:hover"
                                 "{"
                                 "     height:12px;"
                                 "     width:10px;"
                                 "     border-image:url(:/selectfile/scroll/4.png);"
                                 "     subcontrol-position:bottom;"
                                 " }"
 
 
                                 " QScrollBar::sub-line:vertical:hover"
                                 " {"
                                 "     height:12px;"
                                 "     width:10px;"
                                 "     border-image:url(:/selectfile/scroll/2.png);"
                                 "     subcontrol-position:top;"
                                 " }"
 
                                 " QScrollBar::add-page:vertical,"
                                 "QScrollBar::sub-page:vertical"
                                 " {"
                                 "     background-color:transparent;"
                                 "     border-radius:4px;"
                                 "}";
 
    ui->list->verticalScrollBar()->setStyleSheet(listWidgetStyle);

然后就是得有個進(jìn)度條,和歌曲時間

進(jìn)度條,進(jìn)度條自然是用QHorizontalSlider了,主要就是歌曲進(jìn)度得隨著播放進(jìn)度變化,所以可以使用信號和槽,QMediaPlayer有兩個信號,QMediaPlayer::positionChanged和QMediaPlayer::durationChanged,分別是當(dāng)前歌曲播放位置的變化,和切換歌曲時的歌曲長度,那么就需要寫兩個槽來接收這兩個信號了

//1.
 
void Widget::updatePosition(qint64 position)//接收歌曲位置改變,那么滑塊的位置也要變
{
ui->horizontalSlider->setValue(position);//設(shè)置滑塊位置
}
//2
void Widget::updateDuration(qint64 duration)//更新播放歌曲的時間
{
 
ui->horizontalSlider->setRange(0,duration);//根據(jù)播放時長來設(shè)置滑塊的范圍
ui->horizontalSlider->setEnabled(duration>0);
 
ui->horizontalSlider->setPageStep(duration/10);//以及每一步的步數(shù)
 
}

然后將他們連接就可以了

connect(music,&QMediaPlayer::positionChanged,this,&Widget::updatePosition);
 
connect(music,&QMediaPlayer::durationChanged,this,&Widget::updateDuration);

還有就是列表選中的歌曲也要跟著playlist的歌曲變化來變化,需要利用QMediaPlaylist::currentIndexChanged信號,故寫槽:

void Widget::updateList(int value){
 
ui->list->item(value)->setSelected(true);
 
}

然后connect(playlist,&QMediaPlaylist::currentIndexChanged,this,&Widget::updateList);

播放暫停的話就直接點播放個按鈕就music->play();點個暫停按鈕就music->puase();

然后還有就是時間的轉(zhuǎn)換,mp3的時間是用毫秒來算的,那么就要變成 分鐘:秒 的格式,可以寫個函數(shù)來轉(zhuǎn)換:

static QString Time(qint64 time)//轉(zhuǎn)換時間
{
    qint64 seconds=time/1000;
    const qint64 minutes=seconds/60;
    seconds-=minutes*60;
    return QStringLiteral("%1:%2")
            .arg(minutes, 2, 10, QLatin1Char('0'))
            .arg(seconds, 2, 10, QLatin1Char('0'));
}

然后還有播放模式,其實就是為playlist設(shè)置播放模式就可以了,比如順序播放playlist->setPlaybackMode(QMediaPlaylist::Loop);

單曲循環(huán)playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);,隨機(jī)播放playlist->setPlaybackMode(QMediaPlaylist::Random);等

上一首和下一首也很容易

上一首:當(dāng)上一首按鈕點擊執(zhí)行

void Widget::preMusic(){
int row = playlist->mediaCount();//獲取歌曲數(shù)量
int current  = playlist->currentIndex();//獲取當(dāng)前位置
if(--current<0){
current=0;
}
playlist->setCurrentIndex(current);//設(shè)置當(dāng)前音樂
ui->list->scrollToItem(ui->list->item(current));//滾動到當(dāng)前音樂
music->play();//播放
 
}

下一首:點擊下一首按鈕時執(zhí)行

void Widget::nextMusic(){
int row = playlist->mediaCount();//獲取歌曲數(shù)量
int current  = playlist->currentIndex();//獲取當(dāng)前位置
if(++current>row){
current=0;
}
playlist->setCurrentIndex(current);//設(shè)置當(dāng)前音樂
ui->list->scrollToItem(ui->list->item(current));//滾動到當(dāng)前音樂
music->play();//播放
 
}

歌曲定位也很好做,歌曲定位:點擊歌曲定位按鈕執(zhí)行

void getIndex(){
 
ui->list->item(playlist->currentIndex())->setSelected(true);
 
}

基本這樣就可以做出來了。

到此這篇關(guān)于Qt5+QMediaPlayer實現(xiàn)音樂播放器的示例代碼的文章就介紹到這了,更多相關(guān)Qt5 MediaPlayer音樂播放器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)字符串匹配KMP算法

    C語言實現(xiàn)字符串匹配KMP算法

    相信很多人(包括自己)初識KMP算法的時候始終是丈二和尚摸不著頭腦,要么完全不知所云,要么看不懂書上的解釋,要么自己覺得好像心里了解KMP算法的意思,卻說不出個究竟,所謂知其然不知其所以然是也。
    2014-08-08
  • 基于C語言實現(xiàn)見縫插針游戲的示例代碼

    基于C語言實現(xiàn)見縫插針游戲的示例代碼

    見縫插針游戲就是使用鼠標(biāo)左鍵點擊發(fā)射針,當(dāng)兩個針的夾角小于一定限制時,游戲結(jié)束。本文將用C語言實現(xiàn)這一有趣游戲,感興趣的可以了解一下
    2022-11-11
  • C++ 淺談emplace_back及使用誤區(qū)

    C++ 淺談emplace_back及使用誤區(qū)

    這篇文章主要介紹了C++ 淺談emplace_back及使用誤區(qū),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++實現(xiàn)字符串類型相互轉(zhuǎn)換的代碼示例

    C++實現(xiàn)字符串類型相互轉(zhuǎn)換的代碼示例

    在C/C++編程中,字符串是非?;A(chǔ)且常用的數(shù)據(jù)類型,但是由于不同的編程語言或標(biāo)準(zhǔn)庫可能采用不同的字符串類型,因此在不同的應(yīng)用場景下可能需要進(jìn)行字符串類型的相互轉(zhuǎn)換,本文將介紹如何在C/C++中將char*,std::string,QString,CString/MFC?String相互轉(zhuǎn)換
    2023-06-06
  • C語言深入探究選擇排序與基數(shù)排序使用案例講解

    C語言深入探究選擇排序與基數(shù)排序使用案例講解

    算法中排序是十分重要的,而每一個學(xué)習(xí)計算機(jī)的都會在初期的時候接觸到這種排序,下面這篇文章主要給大家介紹了關(guān)于c語言選擇排序與基數(shù)排序使用的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 基于C語言模擬實現(xiàn)人生重開模擬器游戲

    基于C語言模擬實現(xiàn)人生重開模擬器游戲

    人生重開模擬器是前段時間非?;鸬囊粋€小游戲,所以本文我們將一起學(xué)習(xí)使用c語言寫一個簡易版的人生重開模擬器,感興趣的小伙伴可以了解下
    2024-02-02
  • C/C++中宏/Macro的深入講解

    C/C++中宏/Macro的深入講解

    這篇文章主要給大家介紹了關(guān)于C/C++中宏/Macro的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C/C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C++ 中時間與時間戳的轉(zhuǎn)換實例詳解

    C++ 中時間與時間戳的轉(zhuǎn)換實例詳解

    這篇文章主要介紹了C++ 中時間與時間戳的轉(zhuǎn)換實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言 將字符串逆序輸出的實例

    C語言 將字符串逆序輸出的實例

    這篇文章主要介紹了C語言將字符串逆序輸出的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • C語言關(guān)于注釋的知識點總結(jié)

    C語言關(guān)于注釋的知識點總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于C語言關(guān)于注釋的知識點總結(jié),需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02

最新評論

吉林省| 繁峙县| 定结县| 高唐县| 汾西县| 乐都县| 土默特右旗| 辽宁省| 五原县| 西安市| 榕江县| 广安市| 济南市| 泌阳县| 新蔡县| 温宿县| 阳东县| 仪征市| 北京市| 德惠市| 镇平县| 饶河县| 绩溪县| 大姚县| 黄龙县| 鸡西市| 安义县| 阿鲁科尔沁旗| 神农架林区| 简阳市| 鄂托克前旗| 汤阴县| 喜德县| 灌阳县| 留坝县| 阜康市| 平顺县| 海兴县| 兴和县| 农安县| 新巴尔虎左旗|