嵌入式機(jī)車(chē)車(chē)輛車(chē)載播放系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
1.Qt簡(jiǎn)介
本文引用地址:http://www.ex-cimer.com/article/201809/388447.htmQt是Trolltech公司的標(biāo)志性產(chǎn)品(現(xiàn)Trolltech公司已被手機(jī)巨頭NOKIA公司收購(gòu)),是一個(gè)跨平臺(tái)的C++圖形用戶界面(GUI)工具包。它既可以開(kāi)發(fā)GUI程式,也可用于開(kāi)發(fā)非GUI程式,比如控制臺(tái)工具和服務(wù)器。Qt是面向?qū)ο笳Z(yǔ)言,易于擴(kuò)展,并且允許組件編程。Qt應(yīng)用程序接口與工具兼容于所有支持平臺(tái),讓開(kāi)發(fā)員們掌握一個(gè)應(yīng)用程序接口便可執(zhí)行與平臺(tái)非相關(guān)的應(yīng)用開(kāi)發(fā)與配置。
Qt支持下述平臺(tái):
1)MS/Windows-95、98、NT 4.0、ME、2000、XP、Vista和Win7;
2)Unix/X11-Linux、Sun Solaris、HPUX、CompaqTru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS和其它很多X11平臺(tái);3)Macintosh-Mac OS X;
4)Embedded-有幀緩沖(framebuffer)支持的嵌入式Linux平臺(tái),Windows CE.
Qt對(duì)不同平臺(tái)的專門(mén)API進(jìn)行了專門(mén)的封裝(文件處理、網(wǎng)絡(luò)等)。
Qt被Nokia收購(gòu)后推出了一款新的輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE)Qt Creator.QtCreator可帶來(lái)兩大關(guān)鍵益處:提供首個(gè)專為支持跨平臺(tái)開(kāi)發(fā)而設(shè)計(jì)的集成開(kāi)發(fā)環(huán)境(IDE),并確保首次接觸Qt框架的開(kāi)發(fā)人員能迅速上手和操作。
Qt Creator包含了一套用于創(chuàng)建和測(cè)試基于Qt應(yīng)用程序的高效工具,包括:一個(gè)高級(jí)的C++代碼編輯器、上下文感知幫助系統(tǒng)、可視化調(diào)試器、源代碼管理、項(xiàng)目和構(gòu)建管理工具。
Qt/Embedded(簡(jiǎn)稱QT/E)是一個(gè)專門(mén)為嵌入式系統(tǒng)設(shè)計(jì)圖形用戶界面的工具包,是NOKIA公司的圖形化界面開(kāi)發(fā)工具Qt的嵌入式版本,它通過(guò)QtAPI與LinuxI/O以及Framebuffer直接交互,擁有較高的運(yùn)行效率,而且整體采用面向?qū)ο缶幊?,擁有良好地體系架構(gòu)和編程模式。
Qt/embedded和Qt一樣,在4.5版本之后提供了三種不同的授權(quán)協(xié)議GPL,LGPL和Commercial.開(kāi)發(fā)者使用QT/E開(kāi)發(fā)的應(yīng)用程序要移植到不同平臺(tái)時(shí),只需要重新編譯代碼,而不需要對(duì)代碼進(jìn)行修改。并可以隨意設(shè)置程序界面的外觀、方便地為程序連接數(shù)據(jù)庫(kù)、使程序本地化、將程序與Java集成等。
2.使用Qt Creator設(shè)計(jì)界面
在Qt Creator中完成車(chē)載播放器工程的創(chuàng)建后首先是設(shè)計(jì)界面。界面可用代碼生成,也可用Qt Designer輔助設(shè)計(jì)。使用Qt Designer設(shè)計(jì)界面只需將界面中所需的窗口部件拖入ui界面文件中,然后設(shè)置屬性修改其顯示效果,最后使用布局控件設(shè)置布局效果。通過(guò)拖放窗口部件完成的界面在布局上不夠精確,因此本系統(tǒng)采用純代碼來(lái)完成界面開(kāi)發(fā)。
本系統(tǒng)的界面主要包括的窗口部件有Table View、Push Button等。在界面的布局上,系統(tǒng)采用了手工布局方式。
手工布局方式通過(guò)基類Q W i d g e t提供的setGeometry()函數(shù)來(lái)設(shè)置子窗口部件的位置和大小,當(dāng)窗口大小改變的時(shí)候,重新計(jì)算窗口的大小或者變化比例,然后重載QWidget::resizeEvent(QResizeEvent*)函數(shù),能夠使得子窗口部件的大小和位置作出適應(yīng)性的改變。
如圖1所示為本系統(tǒng)的主界面:
界面設(shè)計(jì)的主要開(kāi)發(fā)過(guò)程如下:
1)使基礎(chǔ)窗口QWidget繼承于主窗口QMainWindow,窗體構(gòu)造函數(shù)負(fù)責(zé)模板的初始化;
2)創(chuàng)建MyButton類構(gòu)造窗體按鈕部件,并對(duì)窗口部件中使用的對(duì)象以及函數(shù)進(jìn)行聲明,包括圖標(biāo)、名稱、字體、文本、坐標(biāo)、畫(huà)筆、按鈕是否有效、重繪時(shí)間、鼠標(biāo)按下事件等;
3)添加按鈕的信號(hào)與槽。系統(tǒng)界面中每個(gè)功能按鈕都對(duì)應(yīng)一個(gè)信號(hào)和槽,信號(hào)和槽式Qt編程的核心技術(shù),通過(guò)信號(hào)可以將界面上的空間所發(fā)生的事件進(jìn)行發(fā)射,槽函數(shù)負(fù)責(zé)接受相應(yīng)信號(hào)并作出響應(yīng)處理。如播放暫停按鈕,與其對(duì)應(yīng)的信號(hào)是單擊,它的單擊信號(hào)連接一個(gè)槽處理函數(shù),在這個(gè)函數(shù)中通過(guò)QProcess來(lái)向slave模式下的MPlayer發(fā)送命令,達(dá)到控制播放的目的。其他的控件在處理方式上都與播放暫停按鈕類似,都有自己得信號(hào)和槽。
3.軟件功能模塊設(shè)計(jì)
機(jī)車(chē)車(chē)輛車(chē)載播放器主要由音頻播放和視頻播放兩大部分組成,這兩部分存在著很多相同和相似的功能,為避免重復(fù)編碼,采用C++面向?qū)ο蟮哪K化設(shè)計(jì)思想,將兩部分中功能相似的部分抽取出來(lái),形成獨(dú)立的功能模塊,提高了軟件的可重用性和系統(tǒng)的運(yùn)行效率。各功能模塊均采用C++類來(lái)實(shí)現(xiàn),對(duì)模塊內(nèi)部的數(shù)據(jù)進(jìn)行封轉(zhuǎn),對(duì)外提供接口供外部調(diào)用,一方面提高了系統(tǒng)的數(shù)據(jù)安全性,另一方面也使軟件編碼更加的規(guī)范。
為實(shí)現(xiàn)機(jī)車(chē)車(chē)輛車(chē)載播放系統(tǒng)的功能,創(chuàng)建了窗體文件用于設(shè)置車(chē)載播放器的窗體;創(chuàng)建了配置文件用于處理系統(tǒng)配置信息;創(chuàng)建了用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)操作的源文件;創(chuàng)建了觸摸屏控制文件以及歌曲列表文件。
具體功能模塊設(shè)計(jì)方式如下:
1)搜索歌曲
點(diǎn)擊搜索歌曲按鈕時(shí),跳出一個(gè)對(duì)話框,當(dāng)用戶輸入了歌曲名或名稱中的部分內(nèi)容并確定后,發(fā)送消息到服務(wù)器端,服務(wù)器端對(duì)表song進(jìn)行模糊查詢,得到符合的歌曲列表,將這些信息返回給客戶端,在客戶端形成一個(gè)QwidgetTable控件,用來(lái)顯示搜索的結(jié)果。當(dāng)用戶點(diǎn)擊其中的一行時(shí),將相應(yīng)行的歌曲信息賦值給current并播放。
2)上一首
上一首按鈕連接了prev()函數(shù),它的功能是通過(guò)prev()函數(shù)來(lái)實(shí)現(xiàn)的。在此函數(shù)中,實(shí)現(xiàn)讀取usersong.xml文件中位置為songpos-1的歌曲信息,賦值給current,然后進(jìn)行播放,實(shí)現(xiàn)上一首功能。
3)播放
當(dāng)點(diǎn)擊播放按鈕時(shí),隱藏播放按鈕,顯示暫停按鈕,并讀取c u r r e n t中的信息,通過(guò)Phonon的函數(shù)play()實(shí)現(xiàn)播放。
4)暫停
當(dāng)點(diǎn)擊暫停按鈕時(shí),隱藏暫停按鈕,顯示播放按鈕,調(diào)用Phonon中的pause()函數(shù),將播放暫停。
5)下一首
當(dāng)點(diǎn)擊下一首按鈕時(shí),調(diào)用nextFile()函數(shù),并且當(dāng)歌曲播放完之后會(huì)產(chǎn)生一個(gè)aboutToFinish()信號(hào),這個(gè)時(shí)候也會(huì)調(diào)用nextFile()函數(shù)。在此函數(shù)中調(diào)用readinformation()函數(shù),得到下一首的信息,并播放。
評(píng)論