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

正文內(nèi)容

基于linux的音樂播放器設(shè)計(jì)與實(shí)現(xiàn)論文(參考版)

2024-08-31 15:25本頁面
  

【正文】 測試案例是依應(yīng)用系統(tǒng)應(yīng)該做的功能,照規(guī)范、規(guī)格。 黑箱測試: 主要用于 測試應(yīng)用程式的功能,而不是其內(nèi)部結(jié)構(gòu)或運(yùn)作。 總體來說,軟件測試的目標(biāo)是,以最小的工作量和成本盡可能多的發(fā)現(xiàn)軟件系統(tǒng)中的潛在的各種錯(cuò)誤和缺陷,以保證軟件系統(tǒng)的正確性和可靠性 [17]。 (2) 好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試方案 。 隨后的工作則會(huì)伴隨著軟件開發(fā)的過程逐步展開 [16]。在一般情況下,軟件測試過程與 整個(gè)軟件開發(fā)過程基 本上是平行進(jìn)行的。 24 4 系統(tǒng)測試 測試介紹 軟件測試的經(jīng)典定義是:在規(guī)定的條件下對程序進(jìn)行操作,以發(fā)現(xiàn)程序錯(cuò)誤,衡量軟件品質(zhì),并對其是否能滿足設(shè)計(jì)要求進(jìn)行評估的過程。 運(yùn)行 后 右 擊 托 盤圖標(biāo)彈 出 菜 單 包含五個(gè)選項(xiàng)。 parenttrayIconMenu = new QMenu(parent)。 parenttrayIconshow()。 parenttrayIconsetIcon(icon)。 parentsetWindowIcon(icon)。窗體頂端是:最小化、關(guān)閉按鈕,下方是“音量控制條”,再下面一排是:停止、上一曲、播放、下一曲、打開按鈕,然后是:播 放時(shí)間、播放進(jìn)度條和歌曲長度,最下面是 添加文件后的 播放列表。 pauseIcon = QIcon(skinPath+“”)。 正常顯示的結(jié)果如圖 39 所示 : 圖 39 打開文件路徑存儲(chǔ)正常顯示 播放器界面設(shè)計(jì) 基于 Linux 的音樂播放器,系統(tǒng)配置文件: ,用于保存系統(tǒng)的相關(guān)配置信息,系統(tǒng)啟動(dòng)的時(shí)候,會(huì)讀取配置文件獲取必要的界面配置信息,根 據(jù)相關(guān)的配置信息設(shè)置播放器。如 圖 38 所示 : 圖 38 打開文件路徑存儲(chǔ)亂碼 在 Default open path 中,路徑為: /media/E/音樂,但是當(dāng)寫入 的defaultOpenDir 時(shí),出現(xiàn)了明顯的亂碼現(xiàn)象。 點(diǎn)擊 ok 按鈕,在于 ok 信號相關(guān)聯(lián)的槽函數(shù)將執(zhí)行,保存各項(xiàng)設(shè)置 : musicSettingssetValue(defaultOpenDir,thisuifilepathLEdittext())。 QString defaultOpenDir=QFileDialog::getExistingDirectory(this,Select the default file 22 directory),oldOpenDir)。 當(dāng)用戶點(diǎn)擊 open 按鈕,選擇默認(rèn)打開文件目錄時(shí),首先獲取默認(rèn)打開目錄,將打開文件對話框設(shè)置為此目錄,然后彈出打開文件對話框,獲取用戶選擇的文件目錄,并且將新目錄輸入文本框中,然后修改配置文件 defaultOpenDir 項(xiàng)的值。 首先初始化 QSettings 指針變量 : QSettings *musicSettings = new QSettings(“./config/”,QSettings::IniFormat)。 在 Unix/X11 平臺(tái)下 這兩個(gè) Format 效果是一樣的 [14]。 fileName,Format format, QObject * parent= 0)。Qsettings 的 API 是基于 Qvariant, Qvariant 是一種數(shù)據(jù)類型的集合,它包含了大部分通常的 Qt 數(shù)據(jù)類型,比如 QString, QRec, QImage,等等。此時(shí)系統(tǒng)將修改配置文件。當(dāng)用戶選擇 Options 選項(xiàng)時(shí),會(huì)彈出播放器設(shè)置界面,對播放器進(jìn)行一些設(shè)置。 } } 這樣當(dāng)用戶在雙擊系統(tǒng)托盤圖標(biāo)后,就會(huì)實(shí)現(xiàn)最小化和還原。 } else thishide()。 void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { 20 case QSystemTrayIcon::DoubleClick: if(thisisHidden()) { thisshowNormal()。將 系統(tǒng) 托盤 trayIcon 的 activated()信號與槽iconActivated(QSystemTrayIcon ::ActivationReason)相關(guān)聯(lián)。 void MainWindow::doubleClicked(int row, int ) { mediaObjectsetCurrentSource(sourceList[row])。將播放列表雙擊信號與自定義槽 doubleClicked(int row, int )關(guān)聯(lián) 。 mediaObjectsetQueue(sourceList)。 int index=()。 (7) 打 開 文件 在播放器啟動(dòng)后,播放器的播放列表默認(rèn)是空的,需要用戶手動(dòng)添加播放列表,此時(shí)用戶可以通過打開按鈕,彈出打開系統(tǒng)默認(rèn)的打開 文件對話框選擇歌曲文件。 mediaObjectplay()。 mediaObjectstop()。 (5) 上一首 如果用戶點(diǎn)擊上一首按鈕,系統(tǒng)會(huì)判斷當(dāng)前播放項(xiàng)是否是列表第一項(xiàng),如果是,同時(shí)允許循環(huán)播放,會(huì)跳轉(zhuǎn)到最后一首,如果不是會(huì)提示用戶。 mediaObjectsetCurrentSource((index))。 indexOf(mediaObjectcurrentSource()) + 1。 (4) 下一首 如果用戶點(diǎn)擊下一首按鈕,系統(tǒng)會(huì)判斷當(dāng)前播放項(xiàng)是否是列表最后一項(xiàng),如果是,同時(shí)允許循環(huán)播放,會(huì)跳轉(zhuǎn)到第一首,如果不是 則 會(huì)提示用戶。 (3) 停止 當(dāng)播放器處于播放、停止?fàn)顟B(tài)時(shí), 點(diǎn)擊停止按鍵時(shí) ,將停止對當(dāng)前歌曲的播放。 } 18 (2) 暫停 當(dāng)播放器處于播放狀態(tài)是,想暫停播放歌曲,可以點(diǎn)擊 暫停按鍵時(shí) ,這時(shí)將暫停播放,再次點(diǎn)擊此按鍵,將繼續(xù)從當(dāng)前歌曲暫停處播放。 thisuitotalTimeLablesetText(tr(%1 ) .arg((mm:ss)))。 QTime totalTime(0,(temp / 60000) % 60,(temp / 1000) % 60)。 代碼實(shí)現(xiàn): connect(mediaObject,SIGNAL(tick(qint64)),this,SLOT(showTime(qint64))。 顯示歌 曲長度, mediaObject 在播放過程中發(fā)出 tick( qint64)信號 ,將 mediaObject的 tick( qint64)信號和自定義槽 showTime(qint64)關(guān)聯(lián)。 (1) 播放 當(dāng)點(diǎn)擊播放按鍵時(shí), 播放器 播放用戶選中的歌曲,同時(shí)顯示 播放 歌曲的長度和當(dāng)前播放進(jìn)度信息 [13]。 volumeSlidershow()。 volumeSlidersetAudioOutput(audioOutput)。 將 媒體對象( mediaObject) 和 音頻輸 出設(shè)備( audioOutput)使用函數(shù) Phon on::createPath()連接起來 : Phonon::createPath(mediaObject, audioOutput)。 seekSlider = new Phonon::SeekSlider(uiprogresswidget)。 建立媒體對象 首先實(shí)例化使用 的 Phonon 類: mediaObject =new Phonon::MediaObject(this)。 很適合使用 Qlist 來存儲(chǔ)播放器的播放列表,用法: QListPhonon::MediaSource sourceList。元素個(gè)數(shù)小于 1000的 QList能夠很快地實(shí)現(xiàn)在鏈表中間插入操作,以及快速的查找操作。它以鏈表方式存儲(chǔ)一組值,并能對這組數(shù)據(jù)進(jìn)16 行快速索引,還提供了快速插入和刪除等操作。 Qlist 容器類 QList 不是 Phonon 的 類 成員,而是 Qt 的一個(gè)類庫,它是一種表示鏈表的模板類 。用法其 實(shí) 與上面的 SeekSlider 類似,使用范例如下: Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider。 seekSlider show()。 用法: Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider(this)。 (4) Phonon::SeekSlider class SeekSlider 類別提供一個(gè)可滑動(dòng)的 slider 來設(shè)定多媒體串流播放的位置。如果只是利用 Phonon 來播放多媒體影音 文件 ,其實(shí)只要記得它是用來連接 source 與輸出裝置即可。 用法: AudioOutput *audioOutput=new AudioOutput(Phonon::MusicCategory, this)。它是直接與音頻驅(qū)動(dòng)器通信的層的組成部分,并充當(dāng) MediaObject 的虛擬音頻設(shè)備。所以它能夠經(jīng)由類似喇叭等輸出裝置來播放聲音,多媒體資料的來源必須要經(jīng)過 Phonon::createPath()與MediaObject 連接。 mediaObjectsetCurrentSource(Phonon::MediaSource(/mymusic/))。 ○ 2 VideoWidget-影像播放 。 MediaObject 可說是處理多媒體 文件 最基本的一部份,它接受并管理來自 于MediaSource 的媒體 文件 。后端可以是任何形式,只要你寫出了相應(yīng)的后端插件。并告訴這些插件,現(xiàn)在程序發(fā)出的指令是什么,從插件返回給程序現(xiàn)在的媒體狀態(tài)和信息。 Phonon 其實(shí)什么都不干,他只是提供了一套 API 接口,這套接口可以給你的程序調(diào)用,同時(shí)也是給編寫后端插14 件提供一個(gè)規(guī)范。 Path 是用來連接 Phonon 對象的,比如,一個(gè)媒體對象和一個(gè)接收端,從而構(gòu)成了 Phonon 中的MediaGraph,如 圖 32 所示 : 圖 32 媒體文件播放過程 圖 32 是媒體文件的播放過程, 這些在不同的系統(tǒng)中實(shí)現(xiàn)方式不同,如:在 Linux環(huán)境下,通常使用 GStreamer 庫,在 Max OS X 環(huán)境下,使用 QuickTime,在 windows下,使用 Direct X 和 SirectShow 庫。Sink 是 輸出多媒體, 通常 是一個(gè)播放的裝置 ( 如 聲 卡 ),且 只接受 MediaObject 來的 數(shù)據(jù)。 Phonon 媒體框架 Phonon 有三個(gè)基本概念:媒體對象、接收端和路徑 , 圖 31 是 Phonon 架構(gòu) 圖 [7]: 圖 31 Phonon 框架 圖 31 是 Phonon 的架構(gòu)圖。相對于信號與槽帶來的靈活與簡便,這點(diǎn)性能損失是可以接受的。但是,與創(chuàng)建堆對象時(shí)的 new 操作實(shí)例化對象,以及刪除堆對象的 delete 操作相比較,信號與槽的代價(jià)只是他的很少的一部分。與 callback 相比較,信號與槽有些慢。 (3) 信號與槽的效率問題 。即使關(guān)聯(lián)的對象在運(yùn)行時(shí)被刪除,應(yīng)用程序也不會(huì)出現(xiàn)崩潰。同樣的,對象的槽也不知道是哪些信號關(guān)聯(lián)到了自己。 Qt 信號和槽機(jī)制減弱了 Qt 對象的耦合度。信號和槽可接受任何數(shù)量、任何型態(tài)的參數(shù),所以信號與槽機(jī)制是完全類型安全。信號和其接受的槽之間傳遞的資料型態(tài)必須要相符合,需要關(guān)聯(lián)的信號和槽的簽名必須是等同的,即信號的參數(shù)類型和參數(shù)個(gè)數(shù)與接12 受該信號的槽的參數(shù)類型和參數(shù)個(gè)數(shù)相同;不過,一個(gè)槽的參數(shù)個(gè)數(shù)是可以少于信號的參數(shù)個(gè)數(shù),但缺少的參數(shù)必須是信號參數(shù)的最后一個(gè)或幾個(gè)參數(shù)。 Qt 信號和槽機(jī)制的優(yōu)點(diǎn) 信號和槽機(jī)制有以下優(yōu)點(diǎn) [10]: (1) 類型安全的。同時(shí),信號和槽機(jī)制是完全和 GUI 事件完全獨(dú)立的,槽函數(shù)獨(dú)立循環(huán)。 (3) 多個(gè)信號和一個(gè)槽關(guān)聯(lián)。信號與槽的關(guān)聯(lián)關(guān)系有以下幾種模式: (1) 一個(gè)信號和槽關(guān)聯(lián) 。當(dāng)操作事件發(fā)生的時(shí)候,物件會(huì)發(fā)送出一個(gè)信號( signal);而槽( slot)則是一個(gè)函式接受特定信號并且執(zhí)行槽本身設(shè) 定的動(dòng)作。 信號與槽的關(guān)聯(lián) 信號是一個(gè)特定的標(biāo)識(shí),槽就是一個(gè)函數(shù),卻與一般函數(shù)不同,槽函數(shù)能和信號關(guān)聯(lián),也能夠被直接調(diào)用。接下來的一行 void mySlot() 定義了 槽mySlot, 這個(gè) 槽 沒有攜帶參數(shù);接下來的一行 void mySlot(int x)定義了重名 槽 mySlot,但是它攜帶一個(gè)整形參數(shù)。 void mySlot(int x)。 槽的聲明也是在頭文件中進(jìn)行的。這適用于聯(lián)系非常緊密的類。 (3) private slots 類型。 在這個(gè)區(qū)內(nèi)聲 明的槽意味著當(dāng)前類及其子類可以將信號與之相連接。這對于組件編程非常有用,你可以創(chuàng)建彼此互不了解的對象,將它們的信號與槽進(jìn)行連接以便信息能夠正確的傳遞。 (1) public slots 類型。槽的存取權(quán)限決定了誰能夠與其相關(guān)聯(lián)。槽可以有參數(shù),但槽的參數(shù)不能有缺省
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1