QT筆記(一)

https://www.devbean.net/2012/08/qt-study-road-2-catelog/

Qt 是一個跨平臺的框架。跨平臺 GUI 通常有三種實現策略:

  1. API 映射:(界面庫使用同一套 API,將其映射到不同的底層平臺上面。)大體相當於將不同平臺的 API 提取公共部分。比如說,將 Windows 平臺上的按鈕控件和 Mac OS 上的按鈕組件都取名爲 Button。當你使用 Button 時,如果在 Windows 平臺上,則編譯成按鈕控件;如果在 Mac OS 上,則編譯成按鈕組件。這麼做的好處是,所有組件都是原始平臺自有的,外觀和原生平臺一致;缺點是,編寫庫代碼的時候需要大量工作用於適配不同平臺,並且,只能提取相同部分的 API。比如 Mac OS 的文本框自帶拼寫檢測,但是 Windows 上面沒有,則不能提供該功能。這種策略的典型代表是 wxWidgets。這也是一個標準的 C++ 庫,和 Qt 一樣龐大。它的語法看上去和 MFC 類似,有大量的宏。
  2. API 模擬:前面提到,API 映射會“缺失”不同平臺的特定功能,而 API 模擬則是解決這一問題。不同平臺的有差異 API,將使用工具庫自己的代碼用於模擬出來。按照前面的例子,Mac OS 上的文本框有拼寫檢測,但是 Windows 的沒有。那麼,工具庫自己提供一個拼寫檢測算法,讓 Windows 的文本框也有相同的功能。API 模擬的典型代表是 wine —— 一個 Linux 上面的 Windows 模擬器。它將大部分 Win32 API 在 Linux 上面模擬了出來,讓 Linux 可以通過 wine 運行 Windows 程序。由此可以看出,API 模擬最大優點是,應用程序無需重新編譯,即可運行到特定平臺上。另外一個例子是微軟提供的 DirectX,這個開發庫將屏蔽掉不同顯卡硬件所提供的具體功能。使用這個庫,你無需擔心硬件之間的差異,如果有的顯卡沒有提供該種功能,SDK 會使用軟件的方式加以實現。
  3. GUI 模擬:任何平臺都提供了圖形繪製函數。有些工具庫利用這些基本函數,在不同繪製出自己的組件,這就是 GUI 模擬。GUI 模擬的工作量無疑是很大的,因爲需要使用最基本的繪圖函數將所有組件畫出來;並且這種繪製很難保證和原生組件一模一樣。但是,這一代價帶來的優勢是,可以很方便的修改組件的外觀——只要修改組件繪製函數即可。很多跨平臺的 GUI 庫都是使用的這種策略,例如 gtk+(這是一個 C 語言的圖形界面庫。使用 C 語言很優雅地實現了面向對象程序設計。不過,這也同樣帶來了一個問題——使用大量的類型轉換的宏來模擬多態,並且它的函數名一般都比較長,使用下劃線分割單詞,看上去和 Linux 如出一轍。gtk+ 並不是模擬的原生界面,而有它自己的風格,所以有時候就會和操作系統的界面格格不入。),Swing 以及我們的 Qt。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章