最近用了一段時間的wxWidgets。
基本上主流的界面庫也就算用的差不多了。
這里拿一個表格對這些界面庫做一個比較直觀的比較。
界面庫名稱
|
接口設計
|
界面編輯器
|
高級布局功能
|
平面繪制
|
平臺兼容性
|
語言支持
|
IDE兼容性
|
視圖-模型分離機制
|
運行時
|
其它
|
Windows Forms
|
接口優秀。C++下使用CLI擴展,其它語言為原生支持。
|
界面編輯器完整,包括布局、屬性、消息關聯的完整設置。不可預覽。
|
Table Layout,Splitter Layout,Flow Layout等,Anchor和Dock機制。多分辨率界面下表現良好。
|
GDI+,面向對象的2D繪制接口,使用簡便。
|
需要.Net平臺支持。WIndows或Linux(Mono,非官方支持),支持Windows CE
|
C++/CLI, 支持.net的語言。
|
僅VS。
|
布局和視圖方案建立在代碼中。部分組件支持Model-View架構。
|
需要部署對應的.net
|
商業協議
|
MFC
|
基于宏和虛函數,使用特殊格式注釋,使用自定義的RTTI系統。類接口設計優良。通過回調函數和虛繼承重載調用客戶代碼。
|
基于資源編輯器,僅能對空間基本布局和少量屬性進行調整。不可預覽。
|
缺乏高級布局功能,多分辨率需要是手工或程序中調整。
|
GDI及GDI封裝,可選GDI+
|
Windows,Windows CE
|
C++ Only, 支持COM時可以實現Binary級別復用。
|
僅Visual Studio
|
使用資源保存控件的基本控件布局,提供Doc-View機制和控件數據交換支持視圖分離。
|
需要部署MFC運行時庫。
|
商業協議
|
WTL
|
基于模板和虛函數。類接口類似于MFC。需要使用多重繼承。通過模板特化和回調函數與客戶代碼交互。
|
同MFC
|
同MFC
|
同MFC
|
同MFC
|
同MFC,對COM的支持比MFC完善很多。
|
Visual Studio,Windows下支持標準的C++編譯器。
|
使用資源文件保存空間布局。
|
無
|
自由協議
|
wxWidget
|
宏,自定義RTTI。使用回調函數與用戶代碼交互。
|
無官方界面編輯器??墒褂玫谌浇缑婢庉嬈鳌2糠志庉嬈骶哂型暾乃娂此霉δ?,且具有預覽能力。
|
使用Sizer實現多分辨率的布局。功能偏弱。
|
wxDC等。
|
Windows,Linux,Unix,MacOS等
|
C++, .NET, Python, Lua, Ruby等
|
良好的編譯器兼容性,缺乏IDE繼承。
|
可以將界面屬性生成到代碼中,也可以使用XML格式保存。
|
wx的動態鏈接庫或靜態鏈接。
|
自由協議
|
Qt
|
使用宏和自定義的RTTI。使用Singal-Slot機制實現用戶代碼交互??赏ㄟ^繼承實現擴展。
|
Qt Designer,具備完整的所見即所得編輯功能??深A覽界面。
|
具備完整的布局功能。多分辨率/多平臺下表現良好。
|
QCanvas等。
|
Windows,Linux,Unix,MacOS等。
|
C++,Python等
|
可集成到Eclipse和VS
|
使用資源文件保存界面信息。部分組件具備Model-View-Delegate架構
|
qt的動態鏈接庫。
|
開源協議+商業協議
|
GTK+
|
使用signal-slot機制完成用戶代碼交互。
|
GLADE,具備所見即所得的界面編輯功能
|
Layout Containers,具備較完整的布局能力。
|
GTK Graphics Context
|
Windows,Linux,Unix,MacOS等。 |
C,C++,Python,.NET等。
|
(暫時未知)
|
使用代碼完成界面設置。部分組件具備Model-View架構。
|
GTK Runtime
|
開源協議
|
此外,除了WTL外,其余各界面庫均有完整及時的文檔和手冊,因此比較項中不再指明。
回帖中有人指出國際化問題的比較,事實上MS的產品和開源對于國際化的解決方法是不同的。但是都可以比較方便的解決國際化問題。