




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第13章Qt圖形應(yīng)用程序設(shè)計13.1圖形用戶界面系統(tǒng)(GUI)13.2Qt和Qt/Embedded簡介13.3Qt/Embedded體系結(jié)構(gòu)13.4Qt編程入門13.5Qt和Qt/E開發(fā)環(huán)境的建立和移植本章小結(jié)
13.1圖形用戶界面系統(tǒng)(GUI)
圖形用戶界面系統(tǒng)(GUI)是系統(tǒng)級的底層軟件,它可以和文件系統(tǒng)、操作系統(tǒng)內(nèi)核等一起構(gòu)成一個完整的操作系統(tǒng)。GUI為用戶提供了與應(yīng)用系統(tǒng)交互的可視化通道,同時GUI為程序員提供了一種編程模式,即GUI負責(zé)系統(tǒng)的可視化界面的生成、管理以及系統(tǒng)與用戶之間的信息交互,而程序員只需專注于對實際應(yīng)用的分析。
13.2Qt和Qt/Embedded簡介
Qt就是基于C++語言的一種專門用來開發(fā)GUI界面的程序,它里面包括了:button、label、frame…等很多的可以直接調(diào)用的東西。
1.?Qt是基于C++?的一種語言
Qt可以被稱作是一種C++?的延伸。Qt中有數(shù)百個類(class)都是用C++?寫出來的,這也就是說,Qt本身就具備了C++?的快速、簡易、面向?qū)ο缶幊?Object-OrientedProgramming)等優(yōu)點。
2.?Qt具有非常好的可移植性
Qt不只是可以在Linux中運作,也同樣可以運行在MicrosoftWindows中。這也就意味著,利用Qt編寫出來的程序,在幾乎不用修改的情況下,就可以同時在Linux和MicrosoftWindows中運行。Qt的應(yīng)用非常廣泛,從Linux到Windows,從x86到Embedded都有Qt的影子。
13.3Qt/Embedded體系結(jié)構(gòu)
13.3.1交叉開發(fā)平臺
Qt是用于本地化跨平臺應(yīng)用開發(fā)的領(lǐng)先性框架。Qt所有平臺的API是一致的。這就意味著在一種平臺上寫的應(yīng)用程序,在新的平臺上經(jīng)過重新編譯和連接便能運行于該新平臺上。因此,軟件開發(fā)者通過開發(fā)和維護一種平臺的應(yīng)用源碼來用于多種平臺的開發(fā)。同樣,嵌入式Qt也可以移植基于Qt的軟件到嵌入式Linux中。Qt可提供的平臺如圖13-1所示。圖13-1Qt可提供的平臺13.3.2Qt/E的窗口系統(tǒng)
Qt/E的窗口系統(tǒng)采用一種客戶/服務(wù)器體系結(jié)構(gòu)。如圖13-2所示。一個典型的嵌入式Qt窗口系統(tǒng)一般包括一個服務(wù)器進程、一個或多個客戶進程(簡稱服務(wù)器和客戶)。服務(wù)器負責(zé)為客戶和其本身分配顯示區(qū)域、生成鼠標(biāo)和鍵盤事件??蛻魟t通過與服務(wù)器通信來申請顯示區(qū)域、接收鼠標(biāo)和鍵盤事件??蛻艨梢灾苯釉L問所分配的顯示區(qū)域,以便為用戶提供GUI服務(wù)。服務(wù)器和客戶通過共享內(nèi)存的方式來傳遞所有分配顯示區(qū)域上的信息。圖13-2Qt/E的窗口系統(tǒng)的客戶/服務(wù)器體系結(jié)構(gòu)13.3.3Qt/E圖形引擎的實現(xiàn)
Qt/E的底層圖形引擎基于幀緩沖(framebuffer)。幀緩沖是標(biāo)準(zhǔn)顯示設(shè)備驅(qū)動接口,使用MMAP系統(tǒng)將幀緩存映射到應(yīng)用程序虛擬內(nèi)存空間,這樣應(yīng)用程序可以訪問它。圖13-3信號與槽的連接
13.4Qt編程入門
13.4.1Qt編程實例
下面主要以Red
Hat
9.0中的Qt
Designer為例來講述Qt程序的設(shè)計過程。如果在安裝Red
Hat
9.0時沒有完全安裝,則Qt
Designer在默認情況下是沒有被安裝的,用戶可以從主菜單→系統(tǒng)設(shè)置→添加/刪除應(yīng)用程序中選擇KDE軟件開發(fā),完成Qt
Designer的安裝(如圖13-4所示)。
圖13-4安裝QtDesigner圖13-5New/Open對話框圖13-6保存文件圖13-7QtDesigner主窗口圖13-8創(chuàng)建一個新的表單圖13-9更改表單的屬性圖13-10基本完成的GUI圖13-11加法程序界面效果圖圖13-12為Quit按鈕創(chuàng)建關(guān)聯(lián)圖13-13創(chuàng)建新的欄目圖13-14完成連接創(chuàng)建圖13-15創(chuàng)建Add()函數(shù)圖13-16創(chuàng)建Add()函數(shù)代碼圖13-17生成Makefile文件圖13-18測試程序結(jié)果13.4.2代碼解釋
下面寫一個簡單的HelloWorld例子來解釋一下Qt應(yīng)用程序的運行原理,讀者可對照上面的實例中所自動生成的main.cpp(原代碼如圖13-19所示)來理解上面程序的運行原理。圖13-19main.cpp代碼
13.5Qt和Qt/E開發(fā)環(huán)境的建立和移植
13.5.1Qt2和Qt2/E開發(fā)環(huán)境的建立
本開發(fā)環(huán)境所要的軟件如下:
tmake-1.13.tar.gz
qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz
把這三個文件通過與Windows下文件共享將其拷貝到/home/mxl/dishisanzhang/train-2410-S-qte目錄中,如圖13-20所示。圖13-20拷貝源文件
1.?Qt開發(fā)環(huán)境的搭建
1)解壓安裝包并設(shè)置環(huán)境變量
2)編譯Qt2.3.2
圖13-21編譯Qt2.3.2成功后的界面
3)編譯Qvfb
圖13-22編譯Qvfb成功后的界面
2.?Qt2/E開發(fā)環(huán)境的搭建
1)編譯Qt2/Embedded
圖13-23編譯Qt2/Embedded成功后的界面
2)查看運行結(jié)果
如果上面各步都能夠成功的編譯通過,下面就可以通過運行Qt2/Embedded自帶的demo程序來查看運行結(jié)果。圖13-24執(zhí)行demo程序圖13-25執(zhí)行l(wèi)auncher程序
3)交叉編譯Qt2/E
要將寫好的程序發(fā)布到開發(fā)板上,需要對Qt/Embedded重新編譯,與前面在宿主機上編譯類似,步驟如下:圖13-26交叉編譯Qt2/E結(jié)束后的界面圖13-27測試庫文件13.5.2Qt2/E程序在博創(chuàng)2410開發(fā)板上的移植
1.修改tmake配置文件
[root@localhostlib]#cdTMAKEDIR/lib/qws/linux-arm-g++
[root@localhostlinux-arm-g++]#vi$TMAKEDIR/
lib/qws/linux-arm-g++/tmake.conf
2.生成可執(zhí)行文件
[root@localhostlinux-arm-g++]#cd$QTEDIR/examples
/progressbar
[root@localhostprogressbar]#ls
[root@localhostprogressbar]#makeclean
[root@localhostprogressbar]#progen–tapp.t–o圖13-28查看progressbar可執(zhí)行程序
3.將相關(guān)的庫文件復(fù)制到根文件系統(tǒng)的lib目錄下
1)?QT2/E必要的庫文件
將?/$QTEDIR/lib/(即/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib)目錄下面libqte.so、libqte.so.2、libqte.so.2.3、libqte.so.2.3.10四個文件復(fù)制到根文件系統(tǒng)lib目錄下,即
[root@localhostprogressbar]#
/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/libqte.so*
/home/mxl/dishisanzhang/root/built_rootfs/lib
2)交叉編譯器庫文件
需要復(fù)制編譯器(本章用的3.4.1版本)中/usr/local/arm/3.4.1
/arm-linux/lib中的某些庫文件到根文件系統(tǒng)的lib中,最簡單的辦法是全部復(fù)制過去,即
[root@localhostprogressbar]#/usr/local/arm/3.4.1/arm-linux/lib/*
/home/mxl/dishisanzhang/root/built_rootfs/lib
3)?QT2/E字庫文件
Qt2/E字庫放在lib/fonts中,將Qt2/E字庫文件復(fù)制到根文件系統(tǒng)的lib中,即
[root@localhostprogressbar]#
/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/fonts/*
/home/mxl/dishisanzhang/root/built_rootfs/lib
4.重新制作可寫根文件系統(tǒng)
1)把tmp目錄制作為ramfs文件系統(tǒng)
(1)編譯BusyBox。配置BusyBox及編譯方法和第9章內(nèi)容一樣。
(2)創(chuàng)建linuxrc文件。linuxrc文件放在根目錄下,linuxrc文件內(nèi)容:
#!/bin/sh
echo“mount/tmpasramfs”
/bin/mount-tramfsramfs/tmp
exec/sbin/init
(3)創(chuàng)建inittab文件。inittab文件是init的初始化配置文件,是系統(tǒng)啟動后第一個訪問的腳本文件,后續(xù)的啟動文件是由它指定的。
inittab文件放在根目錄etc目錄下,inittab文件內(nèi)容:
::askfirst:-/bin/sh
::sysinit:/etc/init.d/rcS
(4)創(chuàng)建/etc/init.d文件夾和rcS文件。/etc/init.d/rcS是BusyBox中系統(tǒng)啟動時默認的配置腳本。需要啟動的進程和需要進行的設(shè)置可以放到這個文件里面,并在其中加入必要的初始化工作。
在rcS中添加:
#!/bin/sh
echo“StartingSystem”
hostnameuptech-s3c2410
/bin/mount-a
/bin/mount-tprocproc/proc
/sbin/ifconfigeth0
(5)創(chuàng)建fstab文件。fstab文件是mount文件系統(tǒng)的配置文件。它指定了系統(tǒng)掛載塊設(shè)備和目錄的關(guān)系,需要和實際的系統(tǒng)相配合。inittab文件放在根目錄etc目錄下,fstab文件內(nèi)容:
none/tmpramfsdefaults00
(6)創(chuàng)建profile文件。這個文件主要是為系統(tǒng)添加環(huán)境變量。
inittab文件放在根目錄etc目錄下,profile文件內(nèi)容:
(7)?cramfs文件系統(tǒng)映像的制作。cramfs文件系統(tǒng)映像的制作和第9章內(nèi)容一樣。
(8)下載cramfs根文件系統(tǒng)映像到開發(fā)板。下載cramfs根文件系統(tǒng)映像到開發(fā)板和第9章內(nèi)容一樣。
這里要注意的是,因為Qt的庫較大,所以根文件系統(tǒng)占用Flash的空間較大,第7章對Flash的分區(qū)將不合適,要重新分區(qū),將存放根文件系統(tǒng)的區(qū)間分為24MB大小。分區(qū)命令如下:
vivi>bonpart0128k192k2240k26816k:m65536k回車圖13-29重新分區(qū)后的Flash分區(qū)信息圖13-30新制作的cramfs根文件系統(tǒng)啟動結(jié)果
(9)測試新制作的cramfs根文件系統(tǒng)。為了測試tmp目錄是不是ramfs文件系統(tǒng),可進入?/tmp目錄,創(chuàng)建新的目錄是否成功,若能創(chuàng)建,且系統(tǒng)重啟后?/tmp目錄新創(chuàng)建的目錄將不存在,則可證明tmp目錄是ramfs文件系統(tǒng)。具體過程如下:
/#cdtmp
/tmp#mkdirmxl
/tmp#ls圖13-31/tmp是否是ramfs文件系統(tǒng)
2)制作yaffs2根文件系統(tǒng)
因為2.6.14內(nèi)核配置菜單里沒有yaffs2文件系統(tǒng)選項,如果要讓內(nèi)核支持yaffs2文件系統(tǒng)功能,則需要添加如下三方面的內(nèi)容:
(1)?MTD分區(qū)的支持。
(2)給linux-2.6.14內(nèi)核打補丁(添加YAFFS2選項)。下載yaffs2.tar.gz源碼包,解壓源碼,并進入目錄執(zhí)行:
#./patch-ker.sh/linux-/
(3)添加devfs。
5.測試Qt2/E程序(采用tmp目錄制作為ramfs文件系統(tǒng)的方法)
當(dāng)系統(tǒng)啟動進入根文件系統(tǒng)后,進入progressbar所在的目錄中:
/#cd/mnt
執(zhí)行:
/mnt#ln–sf/dev/fb/0/dev/fb0
進行文件的連接;如果不連接,會出現(xiàn)如下提示信息:
can’topenframebufferdevice/dev/fb0
can’topenframebufferdevice/dev/fb0
drivercannotconnect
執(zhí)行:
/mnt#exportQTDIR=進行Qt目錄環(huán)境變量的設(shè)置;如果不連接,會出現(xiàn)如下提示信息:
Cannotfindfontdefinitionfile/usr/local/qt-embedded/lib/fonts/fontdir-is$QTDIRsetcorrectly?
最后執(zhí)行progressbar程序:
/mnt#./progr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保健品市場品牌定位考核試卷
- 機車車輛維護與檢修技術(shù)考核試卷
- 數(shù)字出版物的版權(quán)合作模式考核試卷
- 染整工藝對麻紡織品抗菌性能的提升考核試卷
- 第1章 美麗家鄉(xiāng)-網(wǎng)站設(shè)計與制作 第1節(jié) 網(wǎng)站的創(chuàng)建 教學(xué)設(shè)計 2023-2024學(xué)年河大版(2023)初中信息技術(shù)第二冊
- 森林防火信息化管理平臺考核試卷
- 智能農(nóng)業(yè)中的農(nóng)業(yè)區(qū)塊鏈技術(shù)的安全與合規(guī)性考核試卷
- 強化信息反饋機制的實施方案計劃
- 挖掘品牌內(nèi)在價值的方式計劃
- 個人發(fā)展作品集的規(guī)劃計劃
- 2025年安徽衛(wèi)生健康職業(yè)學(xué)院單招職業(yè)技能測試題庫及參考答案1套
- 《澳大利亞》導(dǎo)學(xué)案
- 2025四川省安全員A證考試題庫附答案
- 2025年高考語文備考訓(xùn)練之社會現(xiàn)象:“數(shù)字囤積癥”
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫帶答案
- 蘇教版三年級科學(xué)下冊第一單元第3課《植物開花了》課件
- 休閑海島開發(fā)策劃方案
- DB36-T 2097-2024 固定資產(chǎn)投資項目節(jié)能報告編制規(guī)范
- 健康與保健課件
- 《運營管理 第7版》課件全套 馬風(fēng)才 第01-15章 運營管理概論- 互聯(lián)網(wǎng)運營
- 課件-DeepSeek從入門到精通
評論
0/150
提交評論