日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

基于Qt5GUI框架+SQLite的音乐播放器

發布時間:2024/3/24 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Qt5GUI框架+SQLite的音乐播放器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄
音樂播放器 3
一、概述 3
主要內容: 3
已實現的目標: 3
二、主要類的設計 3
1)依次介紹各個主要類的設計: 3
2)綜上所述,各個類之間的關系大致如下圖所示: 6
三、程序的功能特點和運行操作方法 6
四、實現中值得一提的地方 12
1)歌曲圖片 12
2)歌詞展示 12
3)在Qt Designer 中使用自定義的部件 12
4)界面設計總結 12
音樂播放器
一、概述

主要內容:

利用Qt5 GUI 框架及其中的音頻播放模塊,完成了一個小巧、界面精美的本地音樂播放器。支持添加本地音樂、添加歌單、歌詞查看、自定義背景、系統托盤控制播放等。同時, 使用SQLite 本地數據庫保存已添加的音樂、歌單的信息,本文轉載自http://www.biyezuopin.vip/onews.asp?id=15252且使用.ini 文件記錄應用設置信息。

已實現的目標:

?界面精美且支持自定義背景
?支持播放的音樂格式:.mp3 文件、.flac 文件、.mpga 文件
?支持解析并展示歌詞文件(.lrc 文件)
?支持解析歌曲信息(專輯、比特率、縮略圖等等)
?支持歌單管理
?系統托盤可控制播放
?數據庫保存已添加的歌曲和歌單信息

二、主要類的設計

1)依次介紹各個主要類的設計:

a) Music 類
代表一首歌曲。記錄著歌曲相關信息,其中最為重要的是歌曲的 url 信息(即:歌曲文件所在的路徑),播放的時候需要根據 url 來將歌曲文件加入播放器。還記錄下的一些其他的歌曲信息,可見于下圖。
部分數據成員及成員函數展示:

#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);//元數據的解析需要時間,所以這里需要循環等待(但同時需要保持Qt事件處理機制在運行)while(!tempPlayer.isMetaDataAvailable()){QCoreApplication::processEvents();}QStringList list=tempPlayer.availableMetaData();//調試時查看有哪些元數據可用if(tempPlayer.isMetaDataAvailable()){//歌曲信息author = tempPlayer.metaData(QStringLiteral("Author")).toStringList().join(",");//author = tempPlayer.metaData(QStringLiteral("Author")).toString(); //查手冊發現,這里返回的是StringList//author=tempPlayer.metaData(QStringLiteral("ContributingArtist")).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藝術家:%2\n時長:%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();} }















總結

以上是生活随笔為你收集整理的基于Qt5GUI框架+SQLite的音乐播放器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。