热门问题
时间线
聊天
视角

Qt

面向對象的用於建立圖形用戶界面的框架 来自维基百科,自由的百科全书

Qt
Remove ads

Qt/ˈkjuːt/,發音同「cute」[3][4][5])是一個跨平台C++應用程式開發框架。廣泛用於開發GUI程式,這種情況下又被稱為部件工具箱。也可用於開發非GUI程式,例如控制台工具和伺服器。Qt被用於OPIESkypeVLC media playerAdobe Photoshop ElementsVirtualBoxMathematica[6]以及被Autodesk [7][8]歐洲太空總署[9]夢工廠[10][11]GoogleHP[12]KDE盧卡斯影業[13]西門子公司[14]沃爾沃集團[15], 華特迪士尼動畫製作公司[16]三星集團[17]飛利浦[18]Panasonic [19]所使用。

快速預覽 開發者, 目前版本 ...
Remove ads

Qt使用標準的C++和特殊的代碼生成擴充(稱為元對象編譯器(Meta Object Compiler, moc))以及一些巨集。通過語言綁定,其他的程式語言也可以使用Qt。

Qt是自由且開放原始碼的軟件,在GNU較寬鬆公共許可證(LGPL)條款下發布。所有版本都支援廣泛的編譯器,包括GCC的C++編譯器和Visual Studio捆綁的MSVC編譯器。

Remove ads

歷史

更多資訊 時間, Qt版本 ...

Haavard Nord德語Haavard NordEirik Chambe-Eng德語Eirik Chambe-Eng於1991年開始開發「Qt」,1994年3月4日創立公司,最早名為Quasar Technologies,然後更名為Troll Tech,之後又再次更名為Trolltech,中文名是「奇趣科技」,2008年6月17日被NOKIA公司收購,以增強該公司在跨平台軟件研發方面的實力,更名Qt Software

該工具包名為Qt是因為字母Q在Haavard的Emacs字體特別漂亮,而「t」代表「toolkit」,靈感來自Xt,X toolkit[20]

2009年5月11日,諾基亞Qt Software宣布Qt原始碼管理系統面向公眾開放,Qt開發人員可通過為Qt以及與Qt相關的專案貢獻代碼、翻譯、範例以及其他內容,協助引導和塑造Qt未來的發展。為了便於這些內容的管理,Qt Software啟用了基於Git和Gitorious開源專案的Web原始碼管理系統。

在推出開放式Qt代碼函式庫的同時,Qt Software在其網站釋出了其產品規劃(Roadmap)。其中概述了研發專案中的最新功能,展現了現階段對Qt未來發展方向的觀點,以期鼓勵社區提供反饋和貢獻代碼,共同引導和塑造Qt的未來。2012年8月9日,Digia宣布已完成對諾基亞Qt業務及軟件技術的全面收購,並計劃將Qt應用到AndroidiOSWindows 8平台上。[21]

Remove ads

支援平台

使用Qt開發的軟件,相同的程式碼可以在任何支援的平台編譯與執行,而不需要修改原始碼。會自動依平台的不同,表現平台特有的圖形介面風格。

  • Linux/X11:用於X Window System(如SolarisAIXHP-UXLinuxBSD)。支援KDevelop和Eclipse IDE整合
  • Mac:用於Apple Mac OS X。基於Cocoa框架。支援Universal Binary。支援以Xcode編輯、編譯和測試。
  • Windows:用於Microsoft Windows。支援Visual Studio整合,也可以使用MinGW編譯
  • Embedded Linux:用於嵌入式Linux。可以透過編譯移除不常使用的組件與功能。透過自己的視窗系統QWS,不需依賴X Window System,直接寫入Linux幀緩衝。可以減少記憶體消耗。並提供虛擬幀緩衝QVFb,方便在桌面系統上進行嵌入式測試。
  • Windows CE / Mobile :用於Windows CE
  • Symbian:用於Symbian platform
  • Maemo/MeeGo:用於Maemo
  • Wayland –用於Wayland顯示伺服器,Qt應用程式可以在運行時切換圖形後端,如X與Wayland。[22][23]
Remove ads

外部移植

自從諾基亞開放了Qt的原始碼給社群後,Gitorious上各種移植紛紛出現。下面是其中一部份:

授權模式

Qt開放原始碼,並且提供自由軟件的用戶協定。使得它可以被廣泛地應用在各平台上的開放原始碼軟件開發中。

Qt提供三種授權方式。三種授權方式的功能、效能都沒有區別,僅在於授權協定的不同。LGPL和GPL是免費釋出,商業版則需收取授權費。[32]

  • Qt商業版 - Qt商業授權適用於開發專屬和/或商業軟件。此版本適用於不希望與他人共用原始碼,或者遵循GNU較寬鬆公共許可證(LGPL)2.1版或GNU GPL 3.0版條款的開發人員。提供了技術支援服務。可以任意的修改Qt的原始碼,而不需要公開。
  • GNU LGPL v. 2.1- Qt 4.5.0及以後的版本開始遵循GNU LGPL。LGPL允許鏈結到它的軟件使用任意的特許條款,可以被專屬軟件作為類別館參照、釋出和銷售。可以購買支援服務。
  • GNU GPL v. 3.0 - 如果您希望將Qt應用程式與受GNU通用公眾特許條款(GPL)3.0版本條款限制的軟件一同使用,或者您希望Qt應用程式遵循該GNU特許條款版本的條款,則此版本Qt適用於開發此類Qt應用程式。可以購買支援服務。
Remove ads

Qt模組

經過多年發展,Qt不但擁有了完善的C++圖形函式庫,而且近年來的版本逐漸整合了資料庫OpenGL函式庫、多媒體函式庫、網絡指令碼函式庫、XML函式庫、WebKit函式庫等等,其核心函式庫也加入了行程間通訊多線程等模組,極大的豐富了Qt開發大規模複雜跨平台應用程式的能力,真正意義上實現了其研發宗旨「Code Less; Create More; Deploy Anywhere」。

由於各家編譯器規格不同,Qt本身為了跨平台相容性,只能以「最低相容規格」來設計。因此Qt必須具備RTTI、動態建立、Persistence/Serialization的基礎建設,以及建構出自己的容器元件。

  • 下列模組提供一般的軟件開發
    • QtCore—QtCore模組是所有基於Qt的應用程式的基礎,提供訊號與槽的物件間通訊機制、IO、事件和物件處理、多線程
    • QtGui—包含了開發圖形用戶介面應用程式所需的功能。使用其支援的各個平台的原生圖形API。支援反鋸齒、向量形變。支援ARGB頂層widget
    • QtMultimedia—提供了用於多媒體內容處理的QML類型集和C++類集。同時提供訪問攝像頭及音頻功能的API。包含的Qt音頻引擎支援三維音頻回放及管理。
    • QtNetwork—提供了網絡程式設計功能。支援通用協定,如HTTP、FTP和DNS,包括對非同步HTTP 1.1的支援。與較低層的TCP/IP和UDP協定,如QTcpSocket、QTcpServer和QUdpSocket
    • QtOpenGL—提供在應用程式中使用OpenGL和OpenGL ES加入3D圖形。在Windows平台上亦支援Direct3D
    • QtOpenVG-提供OpenVG繪圖支援的一個外掛程式
    • QtScript—包含完全整合的ECMA標準指令碼引擎。提供訊號與槽機制簡化物件間通訊和QtScript偵錯程式。
    • QtScriptTools—額外的Qt Script組件
    • QtSql—將資料庫整合至應用程式。支援所有主要的資料庫驅動包括ODBCMySQL、PSQL、SQLite、ibase、Oracle、Sybase、DB2。
    • QtSvg—支援SVG格式
    • QtWebKit—整合WebKit,提供了HTML瀏覽器引擎,便於在原生應用程式中嵌入網絡內容和服務。
    • QtXml—提供了XML文件的閱讀器和編寫器、支援SAXDOM
    • QtXmlPatternsl—提供了XQueryXPath引擎支援。
    • Phonon—整合Phonon,支援跨平台應用程式播放音頻和視像內容。Qt5開始不支援Phonon。
    • Qt3Support—模組提供相容Qt 3.х.х版本的程式庫
    • QtDeclarative [33] - engine for declaratively building fluid user interfaces in QML
  • 作業於Qt附帶工具的模組
    • QtDesigner—提供擴充Qt Designer的類別。
    • QtUiTools
    • QtHelp—協助整合線上檔案到應用程式中。
    • QtTest—提供單元測試框架和滑鼠和鍵盤模擬功能。整合Visual StudioKDevelop
  • 下列模組用於Unix開發
    • QtDBus
  • 下列模組用於Windows開發
    • QAxContainer
    • QAxServer
Remove ads

圖形用戶介面

Qt的圖形用戶介面的基礎是QWidget。Qt中所有類型的GUI組件如按鈕、標籤、工具列等都衍生自QWidget,而QWidget本身則為QObject的子類別。Widget負責接收滑鼠,鍵盤和來自窗口系統的其他事件,並描繪了自身顯示在螢幕上。每一個GUI組件都是一個widgetwidget還可以作為容器,在其內包含其他Widget

QWidget不是一個抽象類別。並且可以被放置在一個已存在的用戶介面中;若是Widget沒有指定父Widget,當它顯示時就是一個獨立的視窗、或是一個頂層widget。QWidget顯示能力包含了透明化及Double-Buffering。Qt提供一種寄存機制,當Widget於建立時指定父物件,就可把自己的生命週期交給上層物件管理,當上層物件被釋放時,自己也被釋放。確保物件不再使用時都會被刪除。

訊號與槽

Qt利用訊號與槽(signals/slots)機製取代傳統的callback來進行物件之間的溝通。當操作事件發生的時候,物件會傳送出一個訊號(signal);而槽(slot)則是一個函數接受特定訊號並且執行槽本身設置的動作。訊號與槽之間,則透過QObject的靜態方法connect來連結。

訊號在任何執行點上皆可發射,甚至可以在槽裏再發射另一個訊號,訊號與槽的連結不限定為一對一的連結,一個訊號可以連結到多個槽或多個訊號連結到同一個槽,甚至訊號也可連接到訊號。

以往的callback缺乏類型安全,在呼叫處理函數時,無法確定是傳遞正確型態的參數。但訊號和其接受的槽之間傳遞的資料型態必須要相符合,否則編譯器會提出警告。訊號和槽可接受任何數量、任何型態的參數,所以訊號與槽機制是完全類型安全。

訊號與槽機制也確保了低耦合性,傳送訊號的類別並不知道是哪個槽會接受,也就是說一個訊號可以呼叫所有可用的槽。此機制會確保當在"連接"訊號和槽時,槽會接受訊號的參數並且正確執行。

Remove ads

布局管理

布局管理類別用於描述一個應用程式的用戶介面中的Widget是如何放置。當視窗縮放時,布局管理器會自動調整widget的大小、位置或是字型大小,確保他們相對的排列和用戶介面整體仍然保有可用性。

Qt內建的布局管理類型有:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。這些類別繼承自QLayout,但QLayout非繼承自QWidget而是直接源於QObject。他們負責widget的幾何管理。想要創建更複雜的版面組態,可以繼承QLayout來自訂版面組態管理員。

  • QHBoxLayout:組態widget成橫向一列
  • QVBoxLayout:組態widget成垂直一行
  • QGridLayout:組態widget在平面網格
  • QFormLayout:組態widget用於2欄標籤- field

Main Window

Qt提供了下列主視窗管理和相關的用戶介面組件的類別:

  • QMainWindow:提供一個標準的應用程式主視窗。當中可以包括選單、工具列、狀態列、停駐元件等元件。
  • QDockWidget:提供了一個可用於創建彈簧工具調色板或輔助窗口的widget。Dock widgets可以移、關閉、浮動為外部視窗。
  • QToolBar:提供了一個通用的工具欄widget,可以放入一些不同的action有關的工具,如按鈕、下拉選單、comboboxes和spin boxes。

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實現的。

Remove ads

無障礙環境

無障礙環境需要無障礙相容的應用程式、輔助技術、以及輔助工具之間的合作。應用程式通常不會直接溝通輔助工具,而是通過一個輔助技術,這是一個應用程式和工具之間資訊交流的橋樑。用戶介面元素相關訊息,例如按鈕和滾動條,使用輔助技術來顯示。Qt支援Windows上的Microsoft Active Accessibility(MSAA)和Mac OS X上Mac OS X Accessibility。

無障礙相容的應用程式稱為AT-Servers,而輔助工具被稱為AT-Clients。Qt應用程式通常會是一個AT-Server,但特別的程式也可能如同AT-Client方式工作。

國際化

Qt的字體引擎能夠在同一時間正確的顯示各種不同的書寫系統。並且Qt內部使用Unicode編碼來儲存文字。

Qt的多國語言支援技術,可以讓應用程式中的文字全部使用英文撰寫,能夠在完全不需修改程式的狀況下,改變整個應用程式中的文字為另一個語系的文字,並能夠協助處理不同語言的單、複數問題。

獨立的翻譯檔案使得新增支援語言相當容易,同時翻譯檔案(.ts)為XML格式可以直接編輯或使用Qt Liguist進行翻譯,可讓無程式開發能力的翻譯者亦能獨自完成翻譯。Qt附帶的工具程式就能夠自動抽取需要翻譯的文字產生翻譯檔案。

多線程

Qt的線程支援是獨立於平台的線程類別,採用訊號與槽機制,實現類型安全的線程間通訊。這使得它易於開發具可移植性的多線程Qt應用程式。並能充分利用多核架構,獲得最佳執行效能,還能根據可用的處理器內核數自動調整使用的線程數。多線程程式設計也是一個執行耗時操作而不會凍結用戶介面的有效典範。

語言綁定

除了C++外,Qt還為其它多種電腦語言提供了應用程式介面,您也可以使用這些語言開發Qt應用程式

更多資訊 語言, 名稱 - 綁定描述 ...

工具

Qt提供了一些命令列和圖形工具,以方便和加速開發的過程。

  • Qt Creator:輕量級的Qt/C++ IDE開發環境。
  • qmake:跨平台構建工具,可簡化跨不同平台進行專案開發的構建過程。
  • Qt Designer:介面設計師。可以用拖拽的方式將Widget排放在介面上,支援版面組態,支援訊號與槽編輯。
  • Qt Assistant:Qt助手。Qt在線幫助檔案檢視工具。
  • Qt Liguist:翻譯工具。讀取翻譯檔案(如.ts、.po)並為翻譯人員提供友好的翻譯介面。
  • lupdate:從原始碼檔案或其他資源檔案中提取需要翻譯的字串,並將之存入xml格式的.ts檔案中。
  • lrelease:負責將.ts檔案轉化為程式使用的.qm檔案。.qm檔會去掉.ts檔中所有的空白和未翻譯的內容,並將儲存格式壓縮。
  • lconvert:用於翻譯檔案之間的格式轉換。
  • QVFb:虛擬幀快取裝置,模擬framebuffer裝置(尺寸、色深),還可以透過skin模擬硬件鍵盤的布局(包括特殊的按鍵),可以便捷在桌面系統機器上開發嵌入式程式
  • makeqpf:創建用於嵌入式裝置的qpf格式。qpf是一種預先渲染的字體,直接儲存成二進位內容,使用的時候可以用記憶體對映載入,從載入到繪製的過程不需要計算。
  • uic:User Interface Compiler。從用戶介面的檔案(.ui)生成C++代碼。
  • rcc:Resource Compiler。rcc工具根據.qrc檔案的內容將相關的資源在編譯過程中嵌入到Qt應用程式。
  • qtconfig:基於X11的Qt的組態工具和在線幫助。
  • qconfig:Qt Embedded(Linux和Windows CE)組態工具。
  • qtdemo:Qt的實例和示範項目的載入器。
  • qt3to4:協助移植Qt 3程式到Qt 4的工具。
  • qdbusxml2cpp:QtDBus XML compiler。將xml格式的D-Bus介面描述轉換成為C++原始碼
  • D-Bus Viewer:可以檢視D-Bus物件和資訊的工具。
  • Qt Visual Studio Add-in:Visual Studio整合
  • Qt Eclipse Integration:Eclipse整合

Qt Solutions

Qt Solutions提供Qt額外的組件和工具,使Qt的開發更有效率。在Qt 4.5之後,Qt Solutions加入了LGPL的特許

  • 平台和特定行業的組件和工具
  • 整合Qt與特定第三方產品的組件和工具
  • 尖端的元件和新的工具也會被直接加入在Qt框架中發布

使用

使用Qt的UI環境

視窗管理員

以下的視窗管理員,使用了Qt:

應用程式

一些出名的例子如下:

  • 3DSlicer, a free open source software for visualization and medical image computing
  • AcetoneISO:映像檔掛載軟件
  • Adobe Photoshop Album, an image organizing application[38]
  • Arora:一款跨平台的開源網頁瀏覽器
  • Autodesk MotionBuilder:專業的3D角色動畫軟件
  • Autodesk Maya, 3D建模和動畫軟件
  • Autodesk 3ds Max
  • Avidemux, a Free Software program designed for multi-purpose video editing and processing
  • Avogadro:進階分子編輯器
  • BOUML,a free uml toolbox
  • chmcreator:開源的chm開發工具
  • CineFX:一款跨平台、開源、免費、影片剪輯,特效與合成套裝
  • CoCoA, a software for computations in commutative algebra
  • Dash Express, an Internet-enabled personal navigation device
  • DAZ Studio, a 3D figure illustration/animation application
  • Doxygen:API檔案產生器
  • EAGLE, tool for designing printed circuit boards (PCBs)
  • EiskaltDC++, a program that uses the Direct Connect protocol.
  • Emergent神經網絡模擬器。
  • FEKO, a software product for the simulation of electromagnetic fields
  • eva:Linux版QQ聊天軟件。
  • FreeCAD, a free and open source 3D-Solid and general purpose design CAD/CAE
  • FreeMat:一個自由開源的數值計算環境和程式語言
  • Full Tilt Poker, one of the most popular online poker programs
  • Gadu-Gadu:即時通訊軟件
  • Gambas, A free development environment based on a Basic interpreter
  • GoldenDict:一款開源的字典軟件
  • Google地球(Google Earth):三維虛擬地圖軟件。
  • GNS:Cisco網絡模擬器。
  • Guitar Pro 6, a tablature editor
  • 刺蝟大作戰:一個基於百戰天蟲的開源遊戲。
  • Hydrogen, an advanced drum machine
  • ImageVis3D, a volume ray-casting application
  • Ipe:自由的向量圖形編輯器
  • ISE Webpack, a freeware EDA tool for Windows and Linux developed by Xilinx
  • Kadu, a Polish instant messenger using the Gadu-Gadu protocol
  • KDELibs:一個許多KDE程式都使用的共用庫,如AmarokK3bKDevelopKOffice等。
  • KeePassX, a multi-platform port of KeePass, an open source password manager for Microsoft Windows
  • Last.fm播放器:著名的互聯網音樂社交網站的桌面用戶端。
  • Launchy:一個開放原始碼的快捷啟動器
  • LMMS:一個開放原始碼的音樂編輯軟件
  • LyX:使用Qt作為介面的LaTeX軟件。
  • Mathematica:Linux和Windows版本使用Qt作為GUI
  • Maxwell Render, a software package that aids in the production of photorealistic images from computer 3D model data
  • Mixxx:跨平台的開放原始碼DJ混音軟件
  • MuseScore,一個WYSIWYG的樂譜編輯器
  • MythTV:開源的數碼視像錄製軟件。
  • Nuke, a node-based compositor
  • PDFedit:自由的PDF編輯器
  • PokerTH, an open source Texas hold 'em simulator
  • Psi:一款XMPP網絡協定的即時通訊軟件
  • qBittorrent:自由的BitTorrent P2P客戶端
  • QCad:一個用於二維設計及繪圖的CAD軟件
  • Qjackctl, a tool for controlling the JACK Audio Connection Kit
  • QSvn, a GUI Subversion client for Linux, UNIX, Mac OS X and Windows
  • Opera:著名的網頁瀏覽器。
  • Qt Creator, the free software cross-platform integrated development environment from Nokia
  • Qterm:跨平台的BBS軟件。
  • Quantum GIS:自由的桌面GIS
  • Quassel IRC:跨平台的IRC客戶端
  • QupZilla:跨平台的開放原始碼的Webkit網頁瀏覽器。
  • RealFlow, a fluid and dynamics simulator for the 3D industry
  • Recoll:桌面搜尋工具
  • Rosegarden, a free software digital audio workstation program
  • SciDAVis, a cross-platform plotting and data analysis program
  • Scribus:桌面排版軟件。
  • Skype:一個使用人數眾多的基於P2PVOIP聊天軟件。
  • SMPlayer:跨平台多媒體播放器
  • Spotify, music streaming service.
  • Stellarium:一款天文學的自由軟件
  • TeamSpeak:跨平台的音效通訊軟件
  • Texmaker:一款跨平台的開放原始碼LaTeX編輯器
  • TeXworks, It is a graphical user interface to the typesetting system TeX.
  • Tlen.pl:波蘭人發明的即時通訊客戶端
  • TOra, a database administration tool[39]
  • UMPlayer:基於Mplayer的美觀多媒體播放器。
  • UniversalIndentGUI,an application which helps the user to beautify, reformat or indent various kinds of code.
  • Valknut, a program that uses the Direct Connect protocol
  • VirtualBox:虛擬機器軟件。
  • VisIt:一個開源型互動式並列可視化與圖形分析工具,用於檢視科學數據。
  • VisTrails, a scientific workflow management and visualization system
  • VLC多媒體播放器:一個體積小巧、功能強大的開源媒體播放器。
  • VoxOx, a unified communications software.
  • WordPress, based on Qt for Maemo and Symbian
  • wpa supplicant, a free software implementation of an IEEE 802.11i
  • Xconfig:Linux的Kernel組態工具
  • YY語音:又名「歪歪語音」,是一個可以進行線上多人語音聊天和語音會議的免費軟件。在中國大陸擁有龐大的用戶群。
  • 咪咕音樂:中國移動打造的正版音樂播放器[40]
  • WPS Office:金山公司(Kingsoft)出品的辦公軟件,與微軟Office相容性良好,個人版免費。
  • 微信4.0

參見

書目

參考文獻

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads