Qt

Qt是一個跨平臺的C++應用程式開發框架。廣泛用於開發GUI程式，這種情況下又被稱為部件工具箱。也可用於開發非GUI程式，例如控制檯工具和伺服器。Qt被用於OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox與Mathematica以及被Autodesk 、歐洲太空總署、夢工廠、Google、HP、KDE、盧卡斯影業、西門子公司、沃爾沃集團, 華特迪士尼動畫製作公司、三星集團、飛利浦、Panasonic 所使用。它是Digia公司的產品。Qt使用標準的C++和特殊的程式碼生成擴充套件以及一些巨集。透過語言繫結，其他的程式語言也可以使用Qt。Qt是自由且開放原始碼的軟體，在GNU較寬鬆公共許可證條款下發布。所有版本都支援廣泛的編譯器，包括GCC的C++編譯器和Visual Studio。歷史.該工具包名為Qt是因為字母Q在Haavard的Emacs字型特別漂亮，而“t”代表“toolkit”，靈感來自Xt，X toolkit。2009年5月11日，諾基亞Qt Software宣佈Qt原始碼管理系統面向公眾開放，Qt開發人員可透過為Qt以及與Qt相關的專案貢獻程式碼、翻譯、示例以及其他內容，協助引導和塑造Qt未來的發展。為了便於這些內容的管理，Qt Software啟用了基於Git和Gitorious開源專案的Web原始碼管理系統。在推出開放式Qt程式碼庫的同時，Qt Software在其網站釋出了其產品規劃。其中概述了研發專案中的最新功能，展現了現階段對Qt未來發展方向的觀點，以期鼓勵社群提供反饋和貢獻程式碼，共同引導和塑造Qt的未來。2012年8月9日，Digia宣佈已完成對諾基亞Qt業務及軟體技術的全面收購，並計劃將Qt應用到Android、iOS及Windows 8平臺上。支援平臺.使用Qt開發的軟體，相同的程式碼可以在任何支援的平臺上編譯與執行，而不需要修改原始碼。會自動依平臺的不同，表現平臺特有的圖形介面風格。外部移植.自從諾基亞開放了Qt的原始碼給社群後，Gitorious上各種移植紛紛出現。下面是其中一部份：授權模式.Qt開放原始碼，並且提供自由軟體的使用者協議。使得它可以被廣泛地應用在各平臺上的開放原始碼軟體開發中。Qt提供三種授權方式。三種授權方式的功能、效能都沒有區別，僅在於授權協議的不同。LGPL和GPL是免費釋出，商業版則需收取授權費。：Qt模組.經過多年發展，Qt不但擁有了完善的C++圖形庫，而且近年來的版本逐漸整合了資料庫、OpenGL庫、多媒體庫、網路、指令碼庫、XML庫、WebKit庫等等，其核心庫也加入了程序間通訊、多執行緒等模組，極大的豐富了Qt開發大規模複雜跨平臺應用程式的能力，真正意義上實現了其研發宗旨“Code Less; Create More; Deploy Anywhere”。由於各家編譯器規格不同，Qt本身為了跨平臺相容性，-{只}-能以「最低相容規格」來設計。因此Qt必須具備RTTI、動態建立、Persistence/Serialization的基礎建設，以及建構出自己的容器元件。圖形使用者介面.Qt的圖形使用者介面的基礎是QWidget。Qt中所有型別的GUI元件如按鈕、標籤、工具列等都衍生自QWidget，而QWidget本身則為QObject的子類別。Widget負責接收滑鼠，鍵盤和來自視窗系統的其他事件，並描繪了自身顯示在螢幕上。每一個GUI元件都是一個widget，widget還可以作為容器，在其內包含其他Widget。QWidget不是一個抽象類別。並且可以被放置在一個已存在的使用者介面中;若是Widget沒有指定父Widget，當它顯示時就是一個獨立的視窗、或是一個頂層widget。QWidget顯示能力包含了透明化及Double-Buffering。Qt提供一種託管機制，當Widget於建立時指定父物件，就可把自己的生命週期交給上層物件管理，當上層物件被釋放時，自己也被釋放。確保物件不再使用時都會被刪除。訊號與槽.Qt利用訊號與槽則是一個函式接受特定訊號並且執行槽本身設定的動作。訊號與槽之間，則透過QObject的靜態方法connect來連結。訊號在任何執行點上皆可發射，甚至可以在槽裡再發射另一個訊號，訊號與槽的連結不限定為一對一的連結，一個訊號可以連結到多個槽或多個訊號連結到同一個槽，甚至訊號也可連線到訊號。以往的callback缺乏型別安全，在呼叫處理函式時，無法確定是傳遞正確型態的引數。但訊號和其接受的槽之間傳遞的資料型態必須要相符合，否則編譯器會提出警告。訊號和槽可接受任何數量、任何型態的引數，所以訊號與槽機制是完全型別安全。訊號與槽機制也確保了低耦合性，傳送訊號的類別並不知道是哪個槽會接受，也就是說一個訊號可以呼叫所有可用的槽。此機制會確保當在"連線"訊號和槽時，槽會接受訊號的引數並且正確執行。佈局管理.佈局管理類別用於描述一個應用程式的使用者介面中的Widget是如何放置。當視窗縮放時，佈局管理器會自動調整widget的大小、位置或是字型大小，確保他們相對的排列和使用者介面整體仍然保有可用性。Qt內建的佈局管理型別有：QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。這些類別繼承自QLayout，但QLayout非繼承自QWidget而是直接源於QObject。他們負責widget的幾何管理。想要建立更複雜的版面配置，可以繼承QLayout來自訂版面配置管理員。Main Window.Qt提供了下列主視窗管理和相關的使用者介面元件的類別：Graphics View.Graphics View提供了用於管理和互動大量定製的2D圖形物件的平面以及視覺化顯示物件的檢視widget，並支援縮放和旋轉功能。整個Graphics View框架提供一個以Item為基礎的model-view設計。由3個主要的類別組成，分別是QGrphicsItem、QGraphicsScene和QGraphicsView。若干View可以顯示一個Scene，Scene中則包含不同幾何形狀的Item。該框架包括一個事件傳播的架構，讓在Scene上的Item有雙精度的互動能力。Item可以處理鍵盤事件，滑鼠按下、移動、釋放和雙擊事件，他們也可以跟蹤滑鼠移動。Graphics View使用BSP樹可非常快速地找到Item，因此即使是包含百萬個Item的大型Scene，也能實時圖形化顯示。KDE中的Plasma亦是基於Graphics View實現的。無障礙環境.無障礙環境需要無障礙相容的應用程式、輔助技術、以及輔助工具之間的合作。應用程式通常不會直接溝通輔助工具，而是透過一個輔助技術，這是一個應用程式和工具之間資訊交流的橋樑。使用者介面元素相關訊息，例如按鈕和捲軸，使用輔助技術來顯示。Qt支援Windows上的Microsoft Active Accessibility和Mac OS X上Mac OS X Accessibility。無障礙相容的應用程式稱為AT-Servers，而輔助工具被稱為AT-Clients。Qt應用程式通常會是一個AT-Server，但特別的程式也可能如同AT-Client方式工作。國際化.Qt的字型引擎能夠在同一時間正確的顯示各種不同的書寫系統。並且Qt內部使用Unicode編碼來儲存文字。Qt的多國語言支援技術，可以讓應用程式中的文字全部使用英文撰寫，能夠在完全不需修改程式的狀況下，改變整個應用程式中的文字為另一個語系的文字，並能夠協助處理不同語言的單、複數問題。獨立的翻譯檔案使得新增支援語言相當容易，同時翻譯檔案為XML格式可以直接編輯或使用Qt Liguist進行翻譯，可讓無程式開發能力的翻譯者亦能獨自完成翻譯。Qt附帶的工具程式就能夠自動抽取需要翻譯的文字產生翻譯檔案。多執行緒.Qt的執行緒支援是獨立於平臺的執行緒類別，採用訊號與槽機制，實現型別安全的執行緒間通訊。這使得它易於開發具可移植性的多執行緒Qt應用程式。並能充分利用多核架構，獲得最佳執行效能，還能根據可用的處理器核心數自動調整使用的執行緒數。多執行緒程式設計也是一個執行耗時操作而不會凍結使用者介面的有效典範。語言繫結.除了C++外，Qt還為其它多種計算機語言提供了應用程式介面，您也可以使用這些語言開發Qt應用程式。工具.Qt提供了一些命令列和圖形工具，以方便和加速開發的過程。Qt Solutions.Qt Solutions提供Qt額外的元件和工具，使Qt的開發更有效率。在Qt 4.5之後，Qt Solutions加入了LGPL的授權使用.視窗管理員.以下的視窗管理員，使用了Qt：應用程式.一些出名的例子如下：書目.