跳轉到內容

X 視窗程式設計/Qt

來自華夏公益教科書

Qt 是一個跨平臺應用程式開發框架,廣泛用於開發圖形使用者介面程式,並且自 Qt 4 釋出以來,也用於開發非 GUI 程式,例如控制檯工具和伺服器。 Qt 最著名的應用是 KDE、Qtopia 和 OPIE。 它由挪威公司 Trolltech 生產,前身為 Quasar Technologies,後來被諾基亞收購。 Trolltech 內部人士將 Qt 發音為“cute”。

用於 GUI 設計的 Qt 設計師

Qt 使用標準 C++,但透過提供額外的預處理器來擴充套件語言,該預處理器將 Qt 的擴充套件轉換為純 C++。 程式設計師可以使用其他語言使用 Qt; 繫結存在於 Python (PyQt)、Ruby、PHP、C、Perl、Pascal 和 Java (Jambi)。 它在所有主要平臺上執行,並具有廣泛的國際化支援。 非 GUI 功能包括 SQL 資料庫訪問、XML 解析、執行緒管理以及統一的跨平臺檔案處理 API。

Qt 由 Trolltech 在以下平臺上釋出

  • Qt/X11 — 用於 X Window System 的 Qt
  • Qt/Mac — 用於 Apple MacOS X 的 Qt
  • Qt/Windows — 用於 Microsoft Windows 的 Qt
  • Qt/Embedded — 用於嵌入式平臺 (PDA、智慧手機、...) 的 Qt
  • Qt/Jambi — 用於 Java 平臺開發的 Qt。

在這些平臺上,有四種版本的 Qt 可用,分別是

  • Qt Console — 用於非 GUI開發的版本。
  • Qt Desktop Light — 入門級 GUI 版本,剝離了網路和資料庫支援。
  • Qt Desktop — 完整版本。
  • Qt Open Source Edition — 面向開源開發者的完整版本。

前三個版本是在商業許可下發布的,允許閉源開發; 而 Open Source 版本是在 GPL 許可下提供的,以及 LGPL(從版本 4.5 開始),並且另外是在Q Public License (QPL) 下提供,用於 Qt/X11 版本。

在 X11 平臺的情況下,QPL 允許最終應用程式在各種開源許可下獲得許可,例如 LGPL 或 Artistic 許可。 對於 Windows 和 Mac OS X 平臺,GPL 是唯一可用的開源許可,因此用它開發的應用程式也必須是 GPL。

所有版本都支援各種編譯器,包括 GCC C++ 編譯器。 但是,對 Visual Studio 套件的官方支援僅限於商業 Qt/Windows 版本。Q../Free 專案釋出了幾個補丁,這些補丁為開源版本的 Qt/Windows 添加了對 Microsoft Visual Studio 和 Borland C++ Builder 的支援。

Trolltech 於 2005 年 6 月 28 日釋出了 Qt 4,並在框架中引入了五項新技術

  • Tulip 一組模板容器類。
  • Interview 用於專案檢視的模型/檢視體系結構。
  • Arthur 一個 2D 繪圖框架。
  • Scribe 一個 Unicode 文字渲染器,具有用於執行低階文字佈局的公共 API。
  • MainWindow 一個現代的基於操作的主視窗、工具欄、選單和對接體系結構。

Qt 4 在所有支援的平臺(包括 Windows)上以 GPL 和專有許可進行雙重許可(而 Qt/Windows 3.3 僅在專有許可下發布)。

Qt 4.1 於 2005 年 12 月 19 日釋出,引入了整合的 SVG Tiny 支援、Qt 列印系統的 PDF 後端以及其他一些功能。

Qt 4.2 於 2006 年 10 月 4 日釋出,引入了用於小部件樣式的本地 CSS 支援,以及 QGraphicsView 框架,用於有效地渲染螢幕上成千上萬的 2D 物件,以替換 Qt 3.x 的 QCanvas 類。

Haavard Nord 和 Eirik Chambe-Eng(Qt 的最初開發者,以及 Trolltech 的執行長和總裁)於 1991 年開始開發“Qt”,比該公司成立為 Quasar Technologies 早三年,然後更名為 Troll Tech,再後來更名為 Trolltech。

該工具包被稱為 Qt,因為字母 Q 在 Haavard 的 Emacs 字型中看起來很漂亮,而 T 的靈感來自 Xt,即 X 工具包。

當 KDE 成為 GNU/Linux 的領先桌面環境之一時,圍繞 1998 年爆發了爭議。 由於 KDE 基於 Qt,開源和自由軟體運動中的許多人擔心,他們主要作業系統的一個重要部分將成為專有軟體。

這引發了兩項努力:Harmony 工具包,試圖在自由軟體許可下複製 Qt 工具包,以及 GNOME 桌面,旨在完全取代 KDE。 GNOME 桌面使用 GTK+ 工具包,該工具包是為 GIMP 編寫的,主要使用 C 程式語言。

在 1.45 版本之前,Qt 的原始碼是在 FreeQt 許可下發布的——開源倡議和自由軟體基金會認為它不符合開源原則,因為雖然原始碼可用,但它不允許重新分發修改後的版本。 隨著工具包 2.0 版本的釋出,許可證更改為 QPL,一個自由軟體許可證,但自由軟體基金會認為它與 GPL 不相容。 KDE 和 Trolltech 之間尋求妥協,其中 Qt 無法獲得比 QPL 更嚴格的許可,即使 Trolltech 被收購或破產。 這導致了 KDE Free Qt 基金會的建立,該基金會保證,如果在 12 個月內沒有釋出 Qt 的開源版本,Qt 將在 BSD 許可下發布。

Qt 的最初版本只有兩種風格:用於 Unix 的 Qt/X11 和用於 Windows 平臺的 Qt/Windows。 Windows 平臺僅在商業許可下提供。 在 2001 年底,Trolltech 釋出了 Qt 3.0,它增加了對 Mac OS X 平臺的支援。 Mac OS X 支援僅在商業許可下提供,直到 2003 年 6 月,Trolltech 釋出了版本 3.2,其中 Mac OS X 支援在 GPL 許可下提供。

在 2002 年,KDE on Cygwin 專案的成員開始將獲得 GPL 許可的 Qt/X11 程式碼庫移植到 Windows。 這是對 Trolltech 拒絕在 GPL 下許可 Qt/Windows 的回應,理由是 Windows 不是開源平臺。 該專案取得了相當大的成功,儘管它從未達到生產質量。 Qt/Windows 4 於 2005 年 6 月由 Trolltech 在 GPL 下發布。Qt4 現在在開源版本中支援與商業版本相同的平臺集。

Qt 首次釋出時的創新依賴於幾個關鍵概念。

完全抽象的 GUI

[編輯 | 編輯原始碼]

Qt 使用自己的繪製引擎和控制元件。 這使得移植到其他平臺的工作變得更容易,因為 Qt 中很少有類真正依賴於目標平臺。 Qt 過去會模擬其目標平臺的本地外觀,這有時會導致模擬不完美的地方出現細微差異。 但是,這不再適用,因為最新版本的 Qt 使用不同平臺的本地樣式 API 來繪製 Qt 控制元件。

元物件編譯器

[編輯 | 編輯原始碼]

稱為moc,這是一個工具,在編譯 Qt 程式之前必須在程式原始碼上執行該工具。 該工具將生成有關程式中使用類的“元資訊”。 Qt 使用此元資訊來提供 C++ 中不可用的程式設計功能:內省以及訊號和槽|訊號/槽系統。

C++ 社群的一部分批評了使用額外的工具,他們指出 Qt 程式設計是對 C++ 的嘲弄。 尤其是在宏基礎上的實現選擇因缺乏型別安全性而受到批評。 有些人將宏與新的 C++ 關鍵字混淆,並批評了名稱空間的汙染。 Trolltech 認為,這是一個必要的權衡,以提供內省以及動態生成的槽或訊號。 此外,當 Qt 1.x 釋出時,無法依賴編譯器模板實現之間的一致性。

使用moc允許非常靈活的訊號/槽訊息系統,因此多個訊號可以連線到多個槽,到其他訊號,或以“回撥安全”的方式連線到不同執行緒上的槽。

  • Mandel 是由 Wolf Jung 開發的一個互動式、跨平臺和多語言程式,用於繪製曼德勃羅集和朱利亞集,並用於說明和研究它們的數學特性。它的圖形使用者介面基於 Qt。它可以在 Linux、Unix、Windows 和 Mac 上使用。原始碼在 GNU 通用公共許可證下發布。

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書