最近用了一段時間的wxWidgets。
基本上主流的界面庫也就算用的差不多了。
這里拿一個表格對這些界面庫做一個比較直觀的比較。
此外,除了WTL外,其余各界面庫均有完整及時的文檔和手冊,因此比較項中不再指明。
回帖中有人指出國際化問題的比較,事實上MS的產品和開源對于國際化的解決方法是不同的。但是都可以比較方便的解決國際化問題。
基本上主流的界面庫也就算用的差不多了。
這里拿一個表格對這些界面庫做一個比較直觀的比較。
界面庫名稱 |
接口設計 |
界面編輯器 |
高級布局功能 |
平面繪制 |
平臺兼容性 |
語言支持 |
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。使用回調函數與用戶代碼交互。 |
無官方界面編輯器。可使用第三方界面編輯器。部分編輯器具有完整的所見即所得功能,且具有預覽能力。 |
使用Sizer實現多分辨率的布局。功能偏弱。 |
wxDC等。 |
Windows,Linux,Unix,MacOS等 |
C++, .NET, Python, Lua, Ruby等 |
良好的編譯器兼容性,缺乏IDE繼承。 |
可以將界面屬性生成到代碼中,也可以使用XML格式保存。 |
wx的動態鏈接庫或靜態鏈接。 |
自由協議 |
Qt |
使用宏和自定義的RTTI。使用Singal-Slot機制實現用戶代碼交互。可通過繼承實現擴展。 |
Qt Designer,具備完整的所見即所得編輯功能。可預覽界面。 |
具備完整的布局功能。多分辨率/多平臺下表現良好。 |
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的產品和開源對于國際化的解決方法是不同的。但是都可以比較方便的解決國際化問題。