生活随笔
收集整理的這篇文章主要介紹了
基于Qt5GUI框架+SQLite的音乐播放器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄 音樂(lè)播放器 3 一、概述 3 主要內(nèi)容: 3 已實(shí)現(xiàn)的目標(biāo): 3 二、主要類的設(shè)計(jì) 3 1)依次介紹各個(gè)主要類的設(shè)計(jì): 3 2)綜上所述,各個(gè)類之間的關(guān)系大致如下圖所示: 6 三、程序的功能特點(diǎn)和運(yùn)行操作方法 6 四、實(shí)現(xiàn)中值得一提的地方 12 1)歌曲圖片 12 2)歌詞展示 12 3)在Qt Designer 中使用自定義的部件 12 4)界面設(shè)計(jì)總結(jié) 12 音樂(lè)播放器 一、概述
主要內(nèi)容:
利用Qt5 GUI 框架及其中的音頻播放模塊,完成了一個(gè)小巧、界面精美的本地音樂(lè)播放器。支持添加本地音樂(lè)、添加歌單、歌詞查看、自定義背景、系統(tǒng)托盤控制播放等。同時(shí), 使用SQLite 本地?cái)?shù)據(jù)庫(kù)保存已添加的音樂(lè)、歌單的信息,本文轉(zhuǎn)載自http://www.biyezuopin.vip/onews.asp?id=15252且使用.ini 文件記錄應(yīng)用設(shè)置信息。
已實(shí)現(xiàn)的目標(biāo):
?界面精美且支持自定義背景 ?支持播放的音樂(lè)格式:.mp3 文件、.flac 文件、.mpga 文件 ?支持解析并展示歌詞文件(.lrc 文件) ?支持解析歌曲信息(專輯、比特率、縮略圖等等) ?支持歌單管理 ?系統(tǒng)托盤可控制播放 ?數(shù)據(jù)庫(kù)保存已添加的歌曲和歌單信息
二、主要類的設(shè)計(jì)
1)依次介紹各個(gè)主要類的設(shè)計(jì):
a) Music 類 代表一首歌曲。記錄著歌曲相關(guān)信息,其中最為重要的是歌曲的 url 信息(即:歌曲文件所在的路徑),播放的時(shí)候需要根據(jù) url 來(lái)將歌曲文件加入播放器。還記錄下的一些其他的歌曲信息,可見(jiàn)于下圖。 部分?jǐn)?shù)據(jù)成員及成員函數(shù)展示:
# include "Music.h"
# include <QMediaPlayer>
# include <QCoreApplication>
# include <QMessageBox>
# include <QtSql> Music :: Music ( QUrl iurl
)
{ url
= iurl
; refreshInfo ( ) ;
} extern QString
formatTime ( qint64 timeMilliSeconds
) ;
void Music :: refreshInfo ( )
{ QMediaPlayer tempPlayer
; tempPlayer
. setMedia ( url
) ; while ( ! tempPlayer
. isMetaDataAvailable ( ) ) { QCoreApplication :: processEvents ( ) ; } QStringList list
= tempPlayer
. availableMetaData ( ) ; if ( tempPlayer
. isMetaDataAvailable ( ) ) { author
= tempPlayer
. metaData ( QStringLiteral ( "Author" ) ) . toStringList ( ) . join ( "," ) ; title
= tempPlayer
. metaData ( QStringLiteral ( "Title" ) ) . toString ( ) ; albumTitle
= tempPlayer
. metaData ( QStringLiteral ( "AlbumTitle" ) ) . toString ( ) ; audioBitRate
= tempPlayer
. metaData ( QStringLiteral ( "AudioBitRate" ) ) . toInt ( ) ; duration
= tempPlayer
. duration ( ) ; }
} QString
Music :: getLyricFile ( )
{ QString mp3FilePath
= url
. toLocalFile ( ) ; mp3FilePath
. replace ( ".mp3" , ".lrc" ) ; mp3FilePath
. replace ( ".flac" , ".lrc" ) ; mp3FilePath
. replace ( ".mpga" , ".lrc" ) ; return mp3FilePath
;
} QString
Music :: getInfo ( ) const
{ return author
+ " - " + title
+ " [" + formatTime ( duration
) + "]" ;
} void Music :: detail ( )
{ QString
info ( "歌曲名:%1\n藝術(shù)家:%2\n時(shí)長(zhǎng):%3\n唱片集:%4\n比特率:%5\n文件路徑:%6" ) ; info
= info
. arg ( title
, author
, formatTime ( duration
) , albumTitle
, QString :: number ( audioBitRate
) + "bps" , url
. toString ( ) ) ; QMessageBox :: about ( Q_NULLPTR
, "歌曲信息" , info
) ;
} void Music :: insertSQL ( const QString
& name
)
{ QSqlQuery sql_query
; QString insert_sql
= "insert into MusicInfo values (?, ?, ?, ?, ?, ?, ?)" ; sql_query
. prepare ( insert_sql
) ; sql_query
. addBindValue ( name
) ; sql_query
. addBindValue ( url
. toString ( ) ) ; sql_query
. addBindValue ( author
) ; sql_query
. addBindValue ( title
) ; sql_query
. addBindValue ( duration
) ; sql_query
. addBindValue ( albumTitle
) ; sql_query
. addBindValue ( audioBitRate
) ; sql_query
. exec ( ) ;
} bool MusicCompare :: operator ( ) ( const Music
& A
, const Music
& B
)
{ switch ( key
) { case TITLE
: return A
. title
< B
. title
; case AUTHOR
: return A
. author
< B
. author
; case DURATION
: return A
. duration
< B
. duration
; case EQUALITY
: return A
. getUrl ( ) == B
. getUrl ( ) ; default : return A
. getInfo ( ) < B
. getInfo ( ) ; }
}
總結(jié)
以上是生活随笔 為你收集整理的基于Qt5GUI框架+SQLite的音乐播放器 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。