freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于linux的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)論文-閱讀頁

2024-09-16 15:25本頁面
  

【正文】 接。 11 槽也能夠聲明為虛函數(shù),這也是非常有用的。例如,下面聲明了 兩 個(gè)槽: public slots: void mySlot()。 在上面的定義中, slots 是 QT 的關(guān)鍵字。 槽 的返回類型都是 void。 Qt 利用信號(hào)與槽( signals/slots)機(jī)制取代傳統(tǒng)的 callback 來進(jìn)行物件之間的溝通。 在程序中,使用 QObject::connect()函數(shù)來將信號(hào)與槽關(guān)聯(lián)。 (2) 一個(gè)信號(hào)和多個(gè)槽關(guān)聯(lián) 。 一個(gè)信號(hào)與多個(gè)槽關(guān)聯(lián)的情況下,當(dāng)發(fā)出信號(hào)的時(shí)候,與此信號(hào)關(guān)聯(lián)的各個(gè)槽之間以任意的先后順序立即執(zhí)行,即:槽函數(shù)之間的執(zhí)行順序是隨機(jī)的,與信號(hào)和槽關(guān)聯(lián)的先后沒有關(guān)系。 信號(hào)在任何執(zhí)行點(diǎn)上皆可發(fā)射,甚至可以在槽里再發(fā)射另一個(gè)信號(hào),信號(hào)與槽的連結(jié)不限定為一對(duì)一的連結(jié), 一個(gè)信號(hào)可以連結(jié)到多個(gè)槽或多個(gè)信號(hào)連結(jié)到同一個(gè)槽,甚至信號(hào)也可連接到信號(hào)。以往的 callback 缺 乏類型安全,在呼叫處理函數(shù)時(shí),無法確定是傳遞正確型態(tài)的參數(shù)。如果信號(hào)和槽的簽名不符,編譯器會(huì)報(bào)錯(cuò)。 (2) 松散耦合的。激發(fā)信號(hào)的 Qt 對(duì)象無需知道是哪個(gè)對(duì)象的 哪個(gè)槽需要接收它發(fā)出的信號(hào),它需要做的是在適當(dāng)?shù)臅r(shí)間發(fā)送適當(dāng)?shù)男盘?hào)就可以了,而不需要知道也不必關(guān)心它的信號(hào)有沒有被接收到,更不需要 知道 是哪個(gè)對(duì)象的哪個(gè)槽接收到了信號(hào),也就是說一個(gè)信號(hào)可以呼叫所有可用的槽。而一旦關(guān)聯(lián)信號(hào)和槽, Qt 就保證了合適的槽得到調(diào)用。此機(jī)制會(huì)確保當(dāng)在 “ 連接 ” 信號(hào)和槽時(shí),槽會(huì)接受信號(hào)的參數(shù)并且正確執(zhí)行。 信號(hào)和槽機(jī)制增強(qiáng)了對(duì)象間通信的靈活性,然而也損失了一些性能。原因有:需要定位接受信號(hào)的對(duì)象;安全的遍歷所有的關(guān)聯(lián)(如 :一個(gè)信號(hào)關(guān)聯(lián)到多個(gè)槽);多線程,信號(hào)可能排隊(duì)等待。信號(hào)和槽帶來的性能損耗,對(duì)實(shí)時(shí)應(yīng)用程序是很小的。 函數(shù) 基于 Linux 的播放器使用了 Phonon 多媒體框架和 Qt 框架的相關(guān)函數(shù),現(xiàn)簡要介紹如下。 Media Object( 媒體對(duì)象 ) 管理一個(gè) Media Source( 媒13 體源 ) ,比如一個(gè)音樂文件;它提供了簡單的播放控制 ,比如開始、停止和暫停播放。多媒體由 MediaObject 控制播放 , 而由 Sink 來處理這些多媒體 。而 Qt中的 phonon 作為 跨 平臺(tái)的多媒體解決方案,就 應(yīng)該 為用戶屏蔽掉這些差異 ,如圖 33 所示: 圖 33 詳細(xì) Phonon 框架 圖 33 是 Phonon 的詳細(xì)框架圖 , 由圖可知 Phonon 框架實(shí)質(zhì)上分 4 個(gè)部分 : 程序 、Phonon 庫 、 Phonon 后端插件 (phonon_backend)、 真正的后端。同樣, Phonon 庫也不知道,他只管搜索符合自己規(guī)范的插件。而后端才是實(shí)際進(jìn)行讀入媒體、解碼并且播放的部分,他們和后端插件是一一對(duì)應(yīng)的。 Phonon 函數(shù)成員 如圖 34 所示 [7]: 圖 34 主要的 Phonon 類 播放器 主要使用的 Phonon 類及使用 方法介紹如下 [11]: (1) Phonon::MediaObject Class MediaObject 主要提供一個(gè)能夠處理媒體播放的 類 。而媒體播放、暫停與停止都是由它來控制;而在此之前,mediaObject 必須要與 output node 連接,如早先所講的,這個(gè) nodes 主要將媒體輸出至底層的硬 件 ,例如 聲 卡或顯 卡等,而所需要的 output node 則是根據(jù)多媒體的內(nèi)容而所不同,目前 Phonon 有兩種 output node: ○ 1 AudioOutput-聲音播 放 。 15 用法 : Phonon::MediaObject *mediaObject=new Phonon::MediaObject(this)。 (2) Phonon::AudioOutput Class AudioOutput 類別主要是用來把多媒體的聲音送到聲音輸出裝置。 在 Phonon 術(shù)語中,我們要?jiǎng)?chuàng)建的 AudioOutput 對(duì)象叫做音頻接收槽。 MediaObject位于這一層的上層,增加了諸如暫停、播放和倒帶之類的功能。 (3) Phonon::createPath() 這是相當(dāng)重要的一個(gè)函 數(shù),主要用于建立一個(gè) Path,連接兩個(gè) MediaNodes,就是Source 與 Sink。用法: Phonon::Path path=Phonon::createPath(mediaObject, audioOutput)。所以它會(huì)連接到 MediaObject,并控制串流目前的位置。 seekSlider setMediaObject(mediaObject)。 (5) Phonon::VolumeSlider Class VolumeSlider 提供可以控制聲音裝置音量的 類 。 volumeSlidersetAudioOutput(audioOutput)。 QlistT是 Qt 的一種泛型容器類。 QListT是 一組指向被存儲(chǔ)元素的數(shù)組。此外,由于 QList 在鏈表兩端都預(yù)先分配了緩存以應(yīng)對(duì)鏈表兩端的快速添加操作,這樣就使得在 QList 的兩端插入或刪除元素變得非常 迅速 。 播放器的基本功能 在使用 Phonon 多媒體框架前,需要在項(xiàng)目額外設(shè)定使用 Phonon 模組,必須要在qmaek project file(即 .pro)中加入: QT += phonon,將 Phonon 庫添加進(jìn)項(xiàng)目 [6]。 audioOutput =new Phonon::AudioOutput(Phonon::MusicCategory,this)。 volumeSlider=new Phonon::VolumeSlider(uiVolumewidget)。 將進(jìn)度條 seekSlider 與媒體對(duì)象 mediaObject 進(jìn)行關(guān)聯(lián), 使得 歌曲播放的 進(jìn)度和 進(jìn)度條,同時(shí)將音量控制條與音頻輸出設(shè)備連接: seekSlidersetMediaObject(mediaObject)。 最后,將進(jìn)度條和音量 控制條顯示在主窗口中: seekSlidershow()。 播放控制 系統(tǒng)實(shí)現(xiàn)的功能如圖 35 所示 [12]: 17 圖 35 播放器的 基本 功能 圖 35 是播放器的基本功能截圖, 包括:暫停、播放等功能。 代碼實(shí)現(xiàn) : mediaObjectplay()。 能夠?qū)崿F(xiàn)將歌曲長度和播放進(jìn)度,在顯示界面顯示出來。 void MainWindow::showTime(qint64 time) { qint64 temp = mediaObjecttotalTime()。 QTime curTime(0,(time / 60000) % 60,(time / 1000) % 60)。 thisuicurTImeLabelsetText(tr(%1 ) .arg((mm:ss)))。 代碼實(shí)現(xiàn): mediaObjectpause()。 代碼實(shí)現(xiàn): mediaObjectstop()。 代碼實(shí)現(xiàn): int index = sourceList。 mediaObjectstop()。 mediaObjectplay()。 代碼實(shí)現(xiàn): int index = (mediaObjectcurrentSource())1。 mediaObjectsetCurrentSource((index))。 (6) 播放進(jìn)度的拖動(dòng) 如果用戶想自己選擇播放進(jìn)度,可以拖動(dòng)進(jìn)度條( seekSlider),由 seekSlider 自動(dòng)調(diào)整到用戶選擇的播放進(jìn)度。 代碼實(shí)現(xiàn): 19 QStringList files=QFileDialog::getOpenFileNames(this,tr(Selec Files to play ) , defaultOpenDir, tr(*.mp3))。 foreach(QString file,files) { (file)。 } (8) 雙擊播放 在播放列表中顯示著當(dāng)前的播放播放列表,如果用戶想播放其中的某一首歌曲,可以通過雙擊該項(xiàng)實(shí)現(xiàn)歌曲的播放。 代碼實(shí)現(xiàn): connect(thisuimusicTable, SIGNAL(cellDoubleClicked(int,int)),this, SLOT(doubleClicked(int,int)))。 } (9) 雙擊系統(tǒng)圖標(biāo) 為了方便用戶的使用,當(dāng)用戶雙擊播放器系統(tǒng)托盤圖標(biāo)時(shí),可以實(shí)現(xiàn)播放器界面的顯示與隱藏。 代碼實(shí)現(xiàn): connect(thistrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconActivated(QSystemTrayIcon::ActivationReason)))。 thissetWindowState(Qt::WindowActive)。 break。 播放器設(shè)置 基于 Linux 的音樂播放器,在系統(tǒng)文件中存在一個(gè)系統(tǒng)配置文件:,用于保存播放器的相關(guān)配置信息。如果用戶選擇 OK按鈕,將保存設(shè)置。 播放器的設(shè)置界面如圖 36 所示 : 圖 36 播放器設(shè)置界面 21 QSettings 介紹 Qsettings 是 提供的一個(gè)讀取配置文件的類,提供獨(dú)立于平臺(tái)的程序設(shè)置,在windows 平臺(tái),它提供了 ini 文件讀些,注冊表讀寫的功能,而且使用也非常簡單。 函數(shù)原型: QSettings(const QStringamp。 其中 QSettings::Format 有兩種 : (1) QSettings::NativeFormat 在 windows 平臺(tái)可以讀寫 windows 注冊表 ; (2) QSettings::IniFormat 可以讀寫 ini 格式的配置文件 。 QSettings 的使用 在本文中使用 QSettings 類來實(shí)現(xiàn)播放器設(shè)置 [15],將結(jié)果保存在系統(tǒng)文件 中,配置文件內(nèi)容如 圖 37 所示 : 圖 37 文件 (1) minimizeToTray 是否允許播放器最小化到托盤 ; (2) defaultOpenDir 默認(rèn)添加文件打開目錄 ; (3) skinPath 界面背景圖像路徑 。 如果 Minimize 被選中,則修改 文件 minimizeToTray= true, musicSettingssetValue(minimizeToTray,true)。 Qstring oldOpenDir=musicSettingsvalue(defaultOpenDir).toString()。 thisuifilepathLEditsetText(defaultOpenDir)。 QSettings 的亂碼問題 由于漢字的存儲(chǔ)不同于英文字符,所以不能使用 ASCII 字符集進(jìn)行編碼,在使用QSettings 的過程中,會(huì)出現(xiàn)亂碼的情況。為了讓漢字不出現(xiàn)亂碼情況,必須設(shè)置QSettings 的編碼方式:musicSettingssetIniCodec(QTextCodec::codecForName(UTF8))。 設(shè)置背景 根據(jù)配置文件獲取設(shè)置圖標(biāo)路徑,并且初始化圖標(biāo) Qstring skinPath=musicSettingsvalue(“skinPath”).toString()。 運(yùn)行效果 如圖 310 所示 : 23 圖 310 播放器運(yùn)行效果圖 圖 310 是播放 器 的運(yùn)行效果圖 。 設(shè)置系統(tǒng)托盤圖標(biāo) 為程序添加體統(tǒng)托盤圖標(biāo)和上下文菜單 : QIcon icon=QIcon(./image/)。 parenttrayIcon = new QSystemTrayIcon(parent)。 parenttrayIconsetToolTip(music play)。 QAction *minimizeAction = new QAction(QObject::tr(Minimize), parent)。 parenttrayIconMenuaddAction(minimizeAction)。其中 “ Options” 選項(xiàng) 提供播放器的設(shè) 置功能; “ Minimize”、“ Restoration” 選項(xiàng) 用于 實(shí)現(xiàn) 播放器的最小化和恢復(fù)功能 ;“ Show History” 選項(xiàng)用來 實(shí)現(xiàn)顯 示播放 歷 史的功能; “ Quit” 選項(xiàng) 實(shí)現(xiàn) 退出程序功能。 軟件測試 (Software Testing)是發(fā)現(xiàn)軟件中錯(cuò)誤和缺陷的主要手段,是保證軟件質(zhì)量的法寶之一。當(dāng)然,測試計(jì)劃應(yīng)該在需求分析階段就已經(jīng)開始制定了。 軟件測試的目的 對(duì)于軟件測試的目的, 提出過以下觀點(diǎn): (1) 測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程 。 (3) 成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。 測試的方法 軟件測試一般分為白箱測試和黑箱測試 [17]。測試者不需具備應(yīng)用程式的程式碼、內(nèi)部結(jié)構(gòu)和編程語言的
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1