翻譯自 wxWidgets Wiki 官方對比文檔(2004 年左右,部分已更新)。官方原文:WxWidgets Compared To Other Toolkits。
wxWidgets 基礎特性
- 支援語言:C++、Python、Perl、Java、Lua、Eiffel、C#、Basic、Ruby、JavaScript 等。
- 完整 GUI 工具庫,含大量工具類。
- 文檔豐富(含片段)。
- 修改版 LGPL,免費商用/私用,OSI 認證。
- 盡可能使用原生平台 SDK:同代碼 Win 下編譯得 Win 風格,Linux 下得 Linux 風格。優點:原生外觀行為(如 macOS 文本框自帶拼寫檢查);缺點:跨平台行為可能不一致、不適合需非系統風格的應用。
對比速覽
Qt
- 同樣提供非 GUI 類(日期、容器、網絡、OpenGL)。
- Qt 4.5 起雙協議:LGPL(開源/商業)+ 商業協議;wxWidgets 一直修改版 LGPL。
- Qt 自繪組件模擬原生風格(近期版本部分平台用原生 API 繪製,但事件/佈局仍自行實現);wxUniversal 類似。
- KDE/嵌入式 Linux 上 Qt 即 原生 GUI。
- 大項目採用:KDE、Opera(Qt);AOL Communicator(wxWidgets)。
- Qt 大量虛函數(QWidget ≥51 個),更 OO,代碼行少;wxWidgets 多用宏,執行更快(見仁見智)。
- Qt 被 IBM、Borland Kylix 採用;傳聞 wxWidgets 將用於 C++BuilderX。
- Qt for Embedded Linux (framebuffer) 開箱即用,與 X11 差異極小。
- IDE 豐富:Qt Designer/Creator、QDevelop、Edyuk,亦可集成 VS/Eclipse/Xcode;wxWidgets 亦有多 IDE。
- 官方商業支持雙方均有。
- 可用 Qt 實現 wxWidgets,亦可用 wxGTK+GTK-Qt 模擬 Qt。
FLTK
- wxWidgets 更 OO;FLTK 更輕量,wxWidgets 功能全(網絡、打印等)。
- FLTK 組件類型更細緻,移植按鈕樣式極費時。
- FLTK 修改版 LGPL 比 wxWidgets 更嚴格(雖允許靜態鏈接例外)。
- 擁有 GUI 設計器 FLUID。
FOX
- FOX 更輕量,專注 GUI;wxWidgets 全功能(含完整 API)。
- 同 Qt,FOX 自繪組件,不融入平台主題(如無 XP 主題);wxWidgets 用原生 API。
- FOX 1.6 前無 I18N,1.6 採 UTF-8 內部編碼支援亞洲文字。
- 無 Windows 標準對話框,有替代方案。
Java (Swing/AWT/SWT/Qt Jambi/wx4j)
- Java 是語言,wxWidgets 是 GUI API,可結合(如 wx4j 用 wxWidgets 綁定 Java,得 C++ 速度)。
- Java 字節碼啟動慢、響應遲、易反編譯;wxWidgets 編譯機器碼、快、難反編譯。
- 需安裝 JVM,舊版本有性能/安全隱患。
- Java 庫部分用 wxWidgets+C++ 寫以提速。
- Java 組件僅提供跨平台共性,移除平台特有特性(Win 任務欄、Mac 菜單欄、Unix 文件屬性);wxWidgets 可用平台原生代碼或模擬組件(MDI、Tree)。
- Java 佔用更多內存。
- 「一次編寫到處運行」仍是神話,JVM 坑多;wxWidgets 狀況不更糟。
- wxString vs java.lang.String:前者功能更全、文檔更好。
SDL / SFML / Allegro
- SDL (C)、SFML (C++)、Allegro (C) 均為多媒體/遊戲庫,非通用 GUI,適合自定義組件/遊戲開發。
- SDL 單窗口、LGPL v2、優秀 OpenGL 集成(CEGUI 等)。
- SFML 含音頻/網絡/線程,可與 wxWidgets/Qt/X11 混用。
- Allegro 遠古級、Giftware 協議、極基礎 GUI(連移動窗口都不支援)、可與 wxWidgets 共用窗口句柄整合(需
END_OF_MAIN() 配合)。
待續……