初揭Qt面紗——Qt的歷史和特點及安裝

洛欣發表於2010-04-28
本文簡單介紹了Qt的歷史和特點,並引導讀者完成Qt的安裝。
關鍵詞:Qt KDE 安裝方法
  Qt是挪威Trolltech公司開發的物件導向、高度封裝的跨平臺C++圖形使用者介面應用軟體框架,它為使用者提供了一個開發商業級別、多平臺應用軟體的環境。Qt始設計於1992年,當時還不過是幾個程式設計師為了方便程式的編寫與維護而開發的一些程式集。1994 年,開發者們建立了Trolltech公司,1995 年釋出了Qt的第一個商業版本。之後, 如同Linux的發展一樣,Qt逐漸變得羽翼豐滿。在中國,Trolltech公司在2001 年6月與紅旗公司簽訂了協議,共同致力於在手持裝置上使用Qt進行應用軟體的開發;另一家大腕——臺灣威盛也使用Qt 的嵌入式版本在嵌入式平臺上進行相關軟體的開發。在國外,挪威的PGS石油與天然氣公司在考察了多家公司的跨平臺產品(包括Java)之後選擇了Qt進行資料處理軟體的開發, 該公司有超過2000臺的終端用於各種資料的採集、分析與處理。以下是該公司使用Qt開發的軟體中的一個快照:
  現在全球已經有超過45個國家的數以千計的程式設計師使用Qt開發各種軟體。Qt的版本眾多,可分為兩大家族:桌面平臺家族與嵌入式平臺家族。前者又包括以下三個平臺:l Windows平臺,包括Windows 95/98/ME、NT4、2000
和XP。2 X11平臺,包括Linux、Solaris、HP-UX、Irix、AIX以及其他一些Unix的變種。3 Mac平臺。後者執行於嵌入式Linux 核心之上,精簡與優化了各種圖形操作,程式執行時無需X11與motif系統的支援,這樣可有效減少記憶體消耗與CPU負擔。對於使用者來說,桌面家族和嵌入式家族所呼叫的函式與類是一致的,這樣當你移植一個系統時所做的改動就很少,甚至只需重新編譯。Qt與Java同屬跨平臺的開發工具,但原理卻完全不同:Qt的跨平臺特徵是在程式碼級實現而非執行級,不同的平臺需要單獨編譯,因此也不需要什麼虛擬機器。如果說Java是“一次編譯,到處運
行”的話,Qt就是“一次編碼,到處編譯”。這種差異導致的結果是Qt開發的程式執行效率要高於Java開發的程式,可以用於工控等有實時性要求的場合。在這裡也順便提一下另外兩個使用較廣泛的跨平臺開發工具:Kylix和wxWindows。前者是Borland公司的力作,在功能上相當於Delphi for Linux。為了使程式碼能跨平臺編譯,Borland新開發了一種元件CLX,即交叉平臺控制元件庫(Component Library Cross-Platform. )。巧的是Qt被選擇作為CLX的基礎,因此兩者有著親密的血緣關係。可惜Kylix上的開發語言是pascal 語言, 這對於C/C++的愛好者來說難免有點失望了。wxWindows(官方站點www.wxwindows.org)同Qt比較類似,也是一個跨平臺的C++開發架構,自身也不帶編譯器。它最初起源於英國愛丁堡大學的人工智慧研究所,93年釋出了第一個公開版本,支援Windows、Unix 和MAC平臺,目前由一個非贏利目的的民間團體進行開發、升級與維護,原始碼開放,功能也比較完整。但可能是由於它的非贏利性導致投入也不是很多吧,感覺在整體的健壯性、易用性和效能上還是和Qt有著一定的差距。對於同一種平臺Qt亦分不同級別,如免費版,專業版與企業版。免費版僅用於開發原始碼開放的自由軟體,不能用於商業
軟體的開發,Windows下最新的免費版還有時間限制;專業版與企業版可用於開發商業軟體,但需付費購買。截止2002年1月8 日,Qt的最新Windows商業版本為3.0.1版,最新免費非商業版本為2.3版(本次專題中的程式即用2.3版開發)。最新Unix版本是3.0版。
    用過Linux的使用者都知道,Linux發行商一般提供兩套圖形管理程式,一個是KDE,另一個是gnome。其他的GUI還有一些,但以這兩個為主。KDE就是以Qt為基礎設計的一套管理器。由於Trolltech是一個商業公司,因此Qt並不完全按GPL的準則發行,最初發行Qt時原始碼是不公開的。這導致了部分Linux 開發者的反感,他們決定重新設計一個圖形管理器與KDE抗衡,這也就是gnome的由來。現在Qt通過三種許可協議發放:1、商業開發,使用物件是開發商用軟體的程式設計師。2、教學專用,使用物件是用來教學Qt的各個學院、大學。3 、GPL,使用物件是自由軟體的開發者。用收費差異來衡量的話,就是企業版、專業版與免費版。其中X11平臺下的各個版本都提供原始碼;Windows平臺下只有企業版與專業版提供原始碼,且各版本並不同步,例如當前的最新版本為3.0版, 但Windows免費版本是2.3版。
Qt的特徵包括以下幾點:
1.資料庫程式設計
Qt 3.0內建了一組獨立於各平臺和資料庫的API,專門用來呼叫SQL資料庫,這組API為Oracle、PostgreSQL以及MySQL提供ODBC以及特殊資料庫驅動程式支援。Qt 3.0內建GUI和底層資料庫同步的資料檢測支援功能,使得後臺資料的更改與前端介面的重新整理同步,而Qt Designer亦支援這些新的控制功能,為資料庫提供應用軟體快速開發工具(RAD)解決方案。
2.Qt Designer
Qt Designer是一個全功能的圖形使用者介面開發工具,與Delphi的介面有點相似。它支援包括選單和工具欄的應用軟體主視窗的互動式設計,並且完全支援可定製模式的視窗控制元件。此外,Qt Designer還內建了C++編輯器,允許使用者在RAD環境中直接編輯原始碼。
3.Qt Linguist
Qt Linguist是一個本地化工具,能夠讓使用者把基於Qt開發的程式從一種語言簡單、智慧地轉變成另外一個語言,適合於開發國際版軟體。它能夠把程式中所有可見的文字轉換成任何支援統一字元編碼標準(Unicode)和指定平臺的語言,它最主要的特徵是一個適應特殊目的的編輯工具和多語言術語智慧資料庫。一旦完成新的翻譯,資料庫將儲存這些術語,以便以後再次使用。此外,Qt Linguist還完全支援Unicode 3。
4.Qt Assistant
Qt Assistant是Qt 3.0提供的一個獨立應用軟體,它能夠瀏覽Qt的類文件、Qt Designer和Qt Linguist手冊。此外,它還提供了目錄檢索、內容縱覽、書籤、歷史記錄以及在頁面內搜尋等功能,功能上類似於微軟的MSDN。
5.國際化文字顯示
即使是在系統沒有安裝Unicode字型的情況下,Qt 3.0也支援多內碼混合的文字。同時它亦支援從右至左以及從上至下型的語言,像阿拉伯語(Arabic)和希伯來語(Hebrew)。
6.支援HTTP和FTP網路協議
Qt 3.0的網路程式設計模組提供一個通過HTTP協議交換資料的API(以前版本已經實現FTP協議)。
7.支援多顯示器
Qt 3.0允許應用軟體支援多個顯示器。在Unix平臺上,Qt3.0支援Xinerama和傳統的多顯示器技術,而Windows平臺上則是Windows 98和2000支援的虛擬桌面技術。Qt 3.0提供一個獨立於系統平臺的API以實現上述技術。
8.新的元件模型
這個特徵類似於Windows下的COM(雖然COM也號稱平臺無關,但目前似乎僅在Windows平臺上應用),Qt 3.0提供一
個獨立於系統平臺的API,以現實共享庫載入等功能。
9.美觀的GUI介面實現
Qt 3.0支援浮動視窗,擴充套件了風格引擎,支援大量的標準視窗部件, 包括進度顯示條(p r o g r e s s b a r ) , 旋轉框(spinbox)以及表格標題(table header)等。此外,它還為互動式文字編輯增加了圖形介面控制。
10.可接近性支援
Qt可控制與提供有關可接近性體系結構的資訊,通過Qt提供的標準工具可開發視覺或肢體殘疾使用者使用的應用軟體(例如 Windows Magnifier和Narrator)。
11.64位安全
Qt 3.0支援即將推出的最新一代64位硬體。

Qt的類庫數量很多,共計有370多個,可分為以下幾塊:
類別說明
抽象類這些類主要為子類或其他類提供一個基本功能,如框架
類Qframe和試圖類QCanvas
基本控制元件提供諸如按鈕、下拉框這樣的標準控制元件
高階控制元件提供諸如進度條和ListView之類的控制元件
資料庫類現在的應有程式往往要和各種不同資料庫打交道,Qt為此提供了豐富的支援,不過在免費版中該項支援是很有限的
時間類處理日期和時間
拖拉操作類Windows中的拖拉操作(Drag and Drop)使用很方便,Unix中同樣可以輕鬆實現
系統環境類這批類庫用來實現一些系統整體上的功能,諸如事件捕獲、存取系統設定等
事件類建立和控制事件
顯示無關類諸如連結串列、佇列、字串類
影像、列印類提供多種影像檔案的輸入輸出以及列印,還包括鼎鼎大名的OpenGL
幫助系統類在Qt中不僅可以顯示以HTML為基礎的幫助檔案,還對每個控制元件的幫助提示做了很好的實現
幾何管理類管理控制元件在介面上的分佈和相互間的位置關係
隱含/顯式類提供諸如QbitArray、Qbitmap、Qbrush等這些記憶體操作、
裝置相關類,有些只用於Qt內部,大部分適合使用者使用
輸入輸出與網路類提供檔案的讀寫和網路操作
主視窗相關類當你想建立一個比較酷的窗體時,不妨考慮這批類庫,
其中包括選單條、工具條等
多媒體類提供圖橡、聲音與動畫的操作物件模型類這是Qt的框架、包括訊號/反應槽機制的基礎控制元件組織類主要用於介面,其目的是分隔和組織好一批相鄰控制元件外掛類有很多軟體為了方便功能的擴充套件提供了外掛,Qt的設計者見縫插針,讓你也時髦一把標準對話方塊這個想必就不用解釋了,太常用了模板類C++中一個很有特色的東西是模板,通過模板可以讓程式程式碼更靈活執行緒類Windows和Unix的多執行緒設計有著不小的區別,Qt在此也算盡力了XML XML標準是如此的盛行以致於下一版的資料庫將稱作XML Database,Qt中也加入了對XML的支援綜合類其他各種有用的功能
    Qt為了完成其跨平臺的設計目的,在其程式碼中使用了一些專有的關鍵字與巨集,也使用了自已的資原始檔(字尾為ui的文字檔案)。由於Qt的開發包內並不附帶C++編譯器,因此為了能在主流C++編譯器中編譯Qt開發的程式,Trolltech公司特意開發了預編譯器moc.exe與uic.exe。前者把有訊號/反應槽(signals/slot)特徵的標頭檔案“翻譯”成標準的C++檔案,後者把ui資原始檔“翻譯”成標準的C++類定義檔案。這兩個預編譯器的執行無需人工進行,但也不是全自動,而是由工程檔案中的指令預先定義。綜觀Qt的整個編譯過程,可如下所示:Q t 是我們所接觸的一個很好的類庫( 可能用平臺更合適),雖然平時也經常使用MFC。這個“很好”並不單單是指它的類可以為我們的程式開發減少工作量(當然這也是一個原因),更重要的是我們可以從Qt本身學到很多體系結構的設計。雖然Linux本身也是一個很好的體系,並且開放程式碼,但如果一個開發人員要從Linux的原始碼一點一滴開始學起再全盤
掌握的話可能要花費相當多的時間。相比之下Qt整套架構不算小,這使得它有著豐富的功能,諸如圖形、網路、資料庫、各種控制元件、IO操作以及與COM類似的介面,但也並不是非常的龐大以至於大多數人搞上兩三年還搞不清楚其細節。Qt是物件導向設計的,各種功能封裝在類中,整套架構清晰明瞭,相比之下MFC似乎隱藏了更多的細節。同時Qt是開放原始碼的,又有商業公司對它精心呵護,加上世界各地開發人員的踴躍參與使它兼具實用性與理論性。用心體會Qt,我們可以在較短的時間內提升自己的總體設計水平,而不僅僅是程式設計能力。
    學習Qt的最好方法當然是自己動手實踐。Qt的Windows開發包是通過安裝程式解開的,只要執行後按其提示操作就可以了。Qt Windows 2.3版只在VC 5平臺測試過,3.0版則既可以配合VC6、也可以用在Borland Builder5(bcc32 5.5)上面,建議使用VC6。注意在安裝前應已安裝了相應的編譯器。對於VC來說,安裝成功後就會新增一個Addin外掛,如下圖所示:
    同時增加一個工具條: 通過工具條可以方便地啟動Qt嚮導和視覺化編輯器。對於unix版本來說,安裝是
通過命令列來進行的:首先需要解開安裝包,然後在使用者指令碼中增加環境變數。
對於Redhat 來說是在使用者的.profile 檔案中增加以下語句:
QTDIR=/usr/local/qt / * 具體是哪個路徑因人而異, 不要搞錯了 * /
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
之後進入Qt的目錄,執行./configure 和make。前者的作用是配置Qt的lib庫,後者則是編譯Qt的庫檔案、樣例、導引和工具。建議在unix上安裝Qt時選用一臺配置比較高的機器,否則整個編譯過程會花費較多時間。本系列文章的測試平臺分別如下:
1.Windows版
硬體:
AMD Athlon500 CPU + 256M記憶體 + 40G硬碟
軟體:
Win2k Advanced Server英文版(sp2,預設字符集選擇中文) + Visual C++6.0(sp5) + Qt 2.3 非商業版(部分工具引自3.0評估版)
2.Linux版
硬體:
AMD K6-2 300 CPU + 196M記憶體 + 8.6G硬碟
軟體
RadHat 7.0 + Qt3.0評估版在這篇文章裡,我們大概瞭解了Qt的歷史和特點,也安裝了Qt。在下一篇文章裡面,我們將來探討Qt很有特點的訊號處

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22785983/viewspace-661556/,如需轉載,請註明出處,否則將追究法律責任。

相關文章