一、Qt 概述 1、關于 Qt Qt 是 Trolltech 公司的一個產品。Qt 是一個多平臺的 C++圖形用戶界面應用程序框架。 它提供給應用程序開發者建立圖形用戶界面應用程序所需的所有功能。Qt 是完全面向對象 的,它很容易擴展,并且允許真正的組件編程。自從 1996 年早些時候,Qt 進入商業領域, 它已經成為全世界范圍內數千種成功的應用程序的基礎。 Qt 也是流行的 Linux 桌面環境 KDE 的基礎。(KDE 是所有主要的 Linux 發行版的一個標準組件) Qt 支持下述平臺: MS/Windows - 95、98、NT 4.0、ME、和 2000 Unix/X11 - Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX 和 其它很多 X11 平臺 Macintosh - Mac OS X Embedded - 有幀緩沖(frame buffer)支持的 Linux 平臺。 2、Qt 版本信息 Qt 被按不同的版本發行: Qt 企業版和 Qt 專業版:提供給商業軟件開發。它們提供傳統商業軟件發行版并且提供 免費升級和技術支持服務。企業版比專業版多一些擴展模塊。 Qt 自由版:是 Qt 僅僅為了開發自由和開放源碼軟件 提供的 Unix/X11 版本。在 Q 公共許可證和 GNU 通用公共許可證下,它是免費的嵌入式信盈達企鵝要妖氣嗚嗚吧久零就要。 Qt/嵌入式自由版:是 Qt 為了開發自由軟件提供的嵌入式版本。在 GNU 通用公共許可 證下,它是免費的。 下表是關于 Qt 在 Windows 環境下各個版本的區別。 (Qt 為 Windows 只提供了專業版和 企業版,不過自由版本的 Qt 仍然可以在 Windows 環境下使用) 組成模塊 自由版 專業版 企業版 Qt 的基本模塊(工具、核心、窗口部件、對話框) 與平臺無關的 Qt 圖形用戶界面工具包和應用類 X X X Qt 設計器 可視化的 Qt 圖形用戶界面的生成器 X X X 圖標視圖模塊 幾套圖形用戶交互操作的可視化效果。 X X 工作區模塊 多文檔界面(MDI)支持 X X OpenGL 三維圖形模塊 在 Qt 中集成了 OpenGL X 網絡模塊 一些套接字, TCP,FTP 和異步 DNS 查詢并與平臺無關的類 X 畫布模塊 為可視化效果,圖表和其它而優化的二維圖形領域 X 表格模塊 X XML 模塊 X 通過 SAX 接口和 DOM Level 1 的 XML 解析器 SQL 模塊 SQL 數據庫訪問類 X 3、Qt 的組成 Qt 提供了一組范圍相當廣泛的 C++類庫,并包含了幾種命令行和圖形界面的工具,有 效地使用這些工具可以加速開發過程。 Qt Designer:Qt 設計器。用來可視化地設計應用程序界面。 Qt Linguist:Qt 語言學家。用來翻譯應用程序。以此提供對多種語言的支持。 Qmake:使用此工具可以由簡單的、 與平臺無關的工程文件來生成編譯所需的 Makefile。 Qt Assistant:關于 Qt 的幫助文件。類似于 MSDN。可以快速地發現你所需要的幫助。 moc:元對象編譯器。 uic:用戶界面編譯器。在程序編譯時被自動調用,通過 ui_*.h 文件生成應用程序界面。 qembed:轉換數據,比如,將圖片轉換為 C++代碼。 4、Qt 的安裝 安裝的過程對于不同的 Qt 平臺是不同的。在 Windows 環境下安裝 Qt,需要先安裝 MinGW。 MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合 允許人們在沒有第三方動態鏈接庫的情況下使用 GCC (GNU Compiler C) 產生 Windows32 程序。 在基本層,MinGW 是一組包含文件和端口庫,其功能是允許控制臺模式的程序使 用微軟的標準 C 運行時間庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95 發行版以上的 Windows OS 有效,使用基本運行時間,你可以使用 GCC 寫控 制臺模式的符合美國標準化組織(ANSI)程序,可以使用微軟提供的 C 運行時間擴展。該 功能是 Windows32 API 不具備的。下一個組成部分是 w32api 包,它是一組可以使用 Windows32 API 的包含文件和端口庫。與基本運行時間相結合,就可以有充分的權利既使 用 CRT (C Runtime) 又使用 Windows32 API 功能。 實際上 MinGW 并不是一個 C/C++ 編 譯器,而是一套 GNU 工具集合。除開 GCC (GNU 編譯器集合) 以外,MinGW 還包含有 一些其他的 GNU 程序開發工具 (比如 gawk bison 等等)。 在安裝 MinGW 之后,再安裝 Qt,然后更改一下 Windows 系統的環境變量,就可以在 Windows 環境下使用 Qt 了。如果想在 VC 環境下使用 Qt,那么還需要進一步編譯和設置, 或者下載專門用于 VC 的 QT 版本。有關此方面的信息請參考附錄。 二、 開始學習 Qt 1、Hello, Qt! 我們以一個非常簡單的 Qt 程序開始 Qt 的學習。我們首先一行行的分析代碼,然后我 們將會看到怎樣編譯和運行這個程序。 1 #include 2 #include 3 int main (int argc, char *argv []) 4 { 5 QApplication app (argc, argv); 6 QLabel *label = new QLabel ("Hello Qt!"); 7 label->show (); 8 return app. exec (); 9 } 第 1 行和第 2 行包含了兩個類的定義:QApplication 和 QLabel。對于每一個 Qt 的類, 都會有一個同名的頭文件,頭文件里包含了這個類的定義。因此,你如果在程序中使用了一 個類的對象,那么在程序中就必須包括這個頭文件。 第 3 行是程序的入口。幾乎在使用 Qt 的所有情況下,main()函數只需要在把控制權轉 交給 Qt 庫之前執行一些初始化,然后 Qt 庫通過事件來向程序告知用戶的行為。argc 是命 令行變量的數量,argv 是命令行變量的數組。這是一個 C/C++特征。它不是 Qt 專有的,無 論如何 Qt 需要處理這些變量 第 5 行定義了一個 QApplication 對象 App。QApplication 管理了各種各樣的應用程序的 廣泛資源,比如默認的字體和光標。 App 的創建需要 argc 和 argv 是因為 Qt 支持一些自己的 命令行參數。在每一個使用 Qt 的應用程序中都必須使用一個 QApplication 對象,并且在任 何 Qt 的窗口系統部件被使用之前創建此對象是必須的。App 在這里被創建并且處理后面的 命令行變量(比如在 X 窗口下的-display)。請注意,所有被 Qt 識別的命令行參數都會從 argv 中被移除(并且 argc 也因此而減少)。 第 6 行創建了一個 QLabel 窗口部件(widget) ,用來顯示“Hello,Qt!”。在 Qt 和 Unix 的術語中,一個窗口部件就是用戶界面中一個可見的元素,它相當于 Windows 術語中的“容 器”加上“控制器”。按鈕(Button)、菜單(menu)、滾動條(scroll bars)和框架(frame) 都是窗口部件的例子。窗口部件可以包含其它的窗口部件。例如,一個應用程序界面通常就 是一個包含了 QMenuBar,一些 QToolBar,一個 QStatusBar 和其它的一些部件的窗口。絕大 多數應用程序使用一個 QMainWindow 或者一個 QDialog 作為程序界面,但是 Qt 允許任何 窗口部件成為窗口。在這個例子中,QLabel 窗口部件就是作為應用程序主窗口的。 第 7 行使我們創建的 QLabel 可見。當窗口部件被創建的時候,它總是隱藏的,必須調 用 show()來使它可見。通過這個特點我們可以在顯示這些窗口部件之前定制它們,這樣就不 會出現閃爍的情況。 第 8 行就是 main()將控制權交給 Qt。在這里,程序進入了事件循環。事件循環是一種 stand-by 的模式,程序會等待用戶的動作(比如按下鼠標或者是鍵盤)。用戶的動作將會產 生程序可以做出反應的事件(也被稱為“消息”) 。程序對這些事件的反應通常是執行一個或 幾個函數。 為了簡單起見,我們沒有在 main()函數的結尾處調用 delete 來刪除 QLabel 對象。這種 內存泄露是無害的,因為像這樣的小程序,在結束時操作系統將會釋放程序占用的內存堆。 下面我們來編譯這個程序。建立一個名為 hello 的目錄,在目錄下建立一個名為 hello.cpp 的 c++源文件,將上面的代碼寫入文件中。 運行“開始à程序àQt by TrolltechàQt Command Prompt”。 在命令行模式下,切換目錄到 hello 下,然后輸入命令:qmake –project。這個命令將 產生一個依賴于工作平臺的工程文件(hello.pro)。 再輸入命令:qmake hello.pro。這個命令通過工程文件產生一個可以在特定工作平臺 上使用的 makefile。 最后輸入命令:make 來產生應用程序。運行這個程序,可以得到如下的程序界面。 Qt 也支持 XML。我們可以把程序的第 6 行替換成下面的語句: QLabel *label = new QLabel (" Hello " "Qt! ");重新編譯程序,我們發現界面擁有了簡單的 HTML 風格。如下圖:
|