摘 要:在linux操作系統(tǒng)下,以qtopia為圖形界面應(yīng)用程序開發(fā)平臺(tái),介紹了圖形界面控制系統(tǒng)的開發(fā)過程。首先闡述了控制界面的開發(fā)環(huán)境的建立,介紹了界面應(yīng)用程序的設(shè)計(jì),以完成后續(xù)溫度數(shù)據(jù)采集、顯示、目標(biāo)預(yù)設(shè)等功能。
關(guān)鍵詞:Qt技術(shù)圖形界面控制系統(tǒng)程序的設(shè)計(jì)
中圖分類號(hào):TP29文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1674-098X(2011)07(c)-0023-02
隨著嵌入式技術(shù)的發(fā)展,越來越多的智能化帶有界面控制功能的小型設(shè)備深入到人們生活當(dāng)中。開發(fā)者基于嵌入式領(lǐng)域中的Qt技術(shù),設(shè)計(jì)出一套應(yīng)用于工控領(lǐng)域的具有人機(jī)交互界面的智能控制系統(tǒng),該系統(tǒng)實(shí)現(xiàn)AD雙路讀取、數(shù)據(jù)顯示、溫度預(yù)設(shè)、PWM自動(dòng)調(diào)節(jié)等功能,本文著重介紹界面設(shè)計(jì)過程。
1 圖形用戶接口環(huán)境的建立
1.1 安裝Qt/Embedded2.3.7命令
tar xvzf qt-embeded-2.3.7.tar.gz
cd qt.2.3.7
export QTDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH./configure –qconfig –qvfb –depths 4,8,16,32
Make sub-src
其中設(shè)置QT嵌入式開發(fā)包虛擬緩沖幀工具qvfb,并支持4,8,16,32位顯示顏色的深度。虛擬出來的緩沖幀和硬件平臺(tái)設(shè)備上的每個(gè)像素保持一致,這樣在軟件開發(fā)和系統(tǒng)調(diào)用時(shí)就不用總是刷新嵌入式設(shè)備的FLASH存儲(chǔ)空間,加速了整個(gè)研發(fā)的周期。
1.2 安裝Qt/X112.3.2
Qt/X112.3.2提供用戶接口編譯器uic,它所產(chǎn)生的源文件和Qt/embedded的庫一應(yīng)起被編譯鏈接,但是QT for X11的版本該要比Qt/Embedded舊,否則會(huì)導(dǎo)致軟件不兼容。
1.3 安裝qtopia
為了避免qtopia2.2.0復(fù)雜的配置編譯的過程,我們直接從arm9論壇下載了關(guān)于qtopia的安裝腳本并執(zhí)行。
2 圖形界面的設(shè)計(jì)
2.1 用QT圖形設(shè)計(jì)器設(shè)計(jì)控制界面
用QT圖形設(shè)計(jì)器是一個(gè)具有可視化用戶接口的設(shè)計(jì)工具。按照項(xiàng)目需要,控制界面要求簡(jiǎn)單,可預(yù)設(shè)控制值,將界面分為一級(jí)主目錄和若干個(gè)二級(jí)子目錄和三級(jí)子目錄。其中主菜單為功能選項(xiàng),二級(jí)子菜單包括狀態(tài)顯示、溫度預(yù)設(shè)、視頻監(jiān)控、功能簡(jiǎn)介等(視頻監(jiān)控,和多算法選擇現(xiàn)在還沒有開發(fā)完全)。如圖一、圖二所示,為上位機(jī)QT環(huán)境下設(shè)計(jì)的一級(jí)菜單界面和子菜單中的狀態(tài)顯示界面:
uic自動(dòng)創(chuàng)建了類 CDlgMonitorBase,這個(gè)類是以公有方式對(duì)QDialog窗口類的繼承:class CDlgMonitorBase : public QDialog。在該類中添加公有成員:QPushButton* btn_up;提供上選擇按鈕部件;其他三個(gè)觸摸按鍵添加同此方法,完成父類控件的信號(hào)與槽的配對(duì),實(shí)現(xiàn)上下選擇、確定、取消功能:
connect((QObject*)btn_ok,SIGNAL(clicked()),this,SLOT(menu_select()));
在QT應(yīng)用程序的read_adc(int ch)函數(shù)中,命令int ret = ioctl(adc_fd, ADC_SEL_CHANN, ch),其中ch是傳遞進(jìn)來的通道號(hào)0或者1;adc_fd是設(shè)備號(hào),這里傳遞進(jìn)來的為ADC的設(shè)備號(hào),而ADC_SEL_CHANN可以理解為一條命令,直接與ADC的驅(qū)動(dòng)相聯(lián)系,調(diào)用驅(qū)動(dòng)里命令讀取ADC數(shù)據(jù)寄存器ADCDAT0里的值,如果讀到值,ioctl返回值為1。最終read_adc(int ch)實(shí)現(xiàn)了讀取ADC數(shù)據(jù)寄存器中的值。系統(tǒng)不僅具備觸摸屏按鍵控制功能,而且具備硬件面板真實(shí)按鍵功能,為了能夠使兩者建立映射關(guān)系,在MyPIGPC.cpp中具體實(shí)現(xiàn)如下:
bt[0] = btn_status[0];
bt[1] = btn_status[1];
bt[2] = btn_status[2];
bt[3] = btn_status[3];
for (int i=0; i { btn_status[i] = 0; } if (bt[0]) menu_movedn(); if (bt[1]) menu_select(); if (bt[2]) menu_moveup(); if (bt[3]) closeme(); btn_status[]是在頭文件中用靜態(tài)變量定義的四成員的數(shù)組,分別對(duì)應(yīng)著控制的液晶觸摸按鍵,當(dāng)硬件面板上有按鍵被按下,驅(qū)動(dòng)程序會(huì)使btn_status[]中的相應(yīng)變量值為1,然后btn_status[]數(shù)組值將賦值給數(shù)組bt[],值得注意的是兩個(gè)數(shù)組的區(qū)別,前者使用靜態(tài)變量定義的,會(huì)在內(nèi)存中永久性地分成一片空間用來單獨(dú)感應(yīng)按鍵是否被按下,將其值付給char型數(shù)組bt[]后,btn_status[]數(shù)組隨即清零以便感受是否有新的鍵被按下。menu_movedn();menu_select();menu_moveup();closeme();分別是觸摸上四個(gè)按鍵觸發(fā)后所對(duì)應(yīng)的槽函數(shù),當(dāng)硬件按鍵被按下后,調(diào)用相應(yīng)函數(shù),實(shí)現(xiàn)的效果與點(diǎn)擊觸摸屏所實(shí)現(xiàn)的效果是一樣的。 2.2 硬件平臺(tái)控制界面的實(shí)現(xiàn) 將編寫好的程序經(jīng)交叉編譯生成mypigpc,mypigpc.desktop,mypigpc.png三個(gè)文件,通過ftp傳到目標(biāo)板以下三個(gè)目錄: mkdir -p /opt/Qtopia/pics/mypigpc cp mypigpc.png /opt/Qtopia/pics/mypigpc/ 應(yīng)用程序圖標(biāo)存放在該文件夾下。 chmod 777 mypigpc 使登錄的所有人具有最高權(quán)限。 cp mypigpc /opt/Qtopia/bin 可執(zhí)行文件存放該文件夾下。 cp mypigpc.desktop /opt/Qtopia/apps/Application 此時(shí)已把程序固化到硬件平臺(tái)的FLASH中。 3 結(jié)語 本文簡(jiǎn)述了界面開發(fā)環(huán)境的建立,各級(jí)界面的設(shè)計(jì),應(yīng)用程序工作的流程。實(shí)現(xiàn)了界面控制、顯示、觸摸按鍵與硬件平臺(tái)按鍵的映射功能。