QT概述
基於C++的GUI開發框架,跨平臺。Qt 是一個用於桌面系統和嵌入式開發的跨平臺應用程序框架。正則表達式
QT是挪威TROLLTECH公司開發的跨平臺C++工具,在UNIX下很是出名;他的宗旨是「一次編碼處處編譯」與JAVA的「一次編譯處處運行」有着本質的區別,做爲跨平臺開發工具,他的運行速度很是的快(由於他不須要虛擬機的支持),開發的GUI很是漂亮(有人認爲比VISUAL C++強的多,並且簡單)。 sql
QT技術特色
- 面向對象:Qt 的良好封裝機制使得 Qt 的模塊化程度很是高,可重用性較好,對於用戶開發來講是很是方便的。Qt 提供了一種稱爲signals/slots 的安全類型來替代 callback,這使得各個元件之間的協同工做變得十分簡單。
- 豐富的組件和API:Qt 包括多達250個以上的C++類,還替供基於模板的collections, serialization,file,I/O device,directory management, date/time 類。甚至還包括正則表達式的處理功能。
- 支持 2D/3D 圖形渲染,支持 OpenGL
- 對象的通訊機制,信號-槽
- 方便的事件處理模型
- 誇平臺的GUI應用程序的支持
- XML 支持,數據庫,網絡編程,開發工具包,大量的開發文檔
Qt相對於C++增長的特性有
- 可以強有力地支持對象間通訊的信號與槽機制
- 支持可查詢和可設計的動態對象屬性機制
- 事件和事件過濾器
- 基於上下文的字符串本地化
- 可以支持多任務的定時器
- 支持按層次檢索的對象樹
- 受保護指針
- 動態類型轉換
開發工具包
- 圖形設計器:Qt Designer
- 編譯工具:qmake
- 本地化工具:Qt Linguist
- 幫助文檔:Qt Assistant
- 元對象編譯器:moc
- 用戶接口編譯器:uic
- 資源編譯器:rcc
Qt 5 與 Qt 4 最大的一個區別之一是底層架構有了修改。Qt 5 引入了模塊化的概念,將衆多功能細分到幾個模塊之中。Qt 4 也有模塊的概念,可是是一種很粗的劃分,而 Qt 5 則更加細化。本節主要對 Qt 5 的模塊進行一個簡單的介紹,以便之後你們須要哪些功能的時候知道到哪一個模塊去尋找。數據庫
Qt 5 模塊分爲 Essentials Modules 和 Add-on Modules 兩部分。前者是基礎模塊,在全部平臺上均可用;後者是擴展模塊,創建在基礎模塊的基礎之上,在可以運行 Qt 的平臺之上能夠酌情引入。編程
Qt 基礎模塊分爲如下幾個:安全
- Qt Core,提供核心的非 GUI 功能,全部模塊都須要這個模塊。這個模塊的類包括了動畫框架、定時器、各個容器類、時間日期類、事件、IO、JSON、插件機制、智能指針、圖形(矩形、路徑等)、線程、XML 等。全部這些類均可以經過 <QtCore> 頭文件引入。
- Qt Gui,提供 GUI 程序的基本功能,包括與窗口系統的集成、事件處理、OpenGL 和 OpenGL ES 集成、2D 圖像、字體、拖放等。這些類通常由 Qt 用戶界面類內部使用,固然也能夠用於訪問底層的 OpenGL ES 圖像 API。Qt Gui 模塊提供的是全部圖形用戶界面程序都須要的通用功能。
- Qt Multimedia,提供視頻、音頻、收音機以及攝像頭等功能。這些類能夠經過 <QtMultimedia> 引入,並且須要在 pro 文件中添加 QT += multimedia。
- Qt Network,提供跨平臺的網絡功能。這些類能夠經過 <QtNetwork> 引入,並且須要在 pro 文件中添加 QT += network。
- Qt Qml,提供供 QML(一種腳本語言,也提供 JavaScript 的交互機制) 使用的 C++ API。這些類能夠經過 <QtQml> 引入,並且須要在 pro 文件中添加 QT += qml。
- Qt Quick,容許在 Qt/C++ 程序中嵌入 Qt Quick(一種基於 Qt 的高度動畫的用戶界面,適合於移動平臺開發)。這些類能夠經過 <QtQuick> 引入,並且須要在 pro 文件中添加 QT += quick。
- Qt SQL,容許使用 SQL 訪問數據庫。這些類能夠經過 <QtSql> 引入,並且須要在 pro 文件中添加 QT += sql。
- Qt Test,提供 Qt 程序的單元測試功能。這些類能夠經過 <QtTest> 引入,並且須要在 pro 文件中添加 QT += testlib。
- Qt Webkit,基於 WebKit2 的實現以及一套全新的 QML API(順便說一下,Qt 4.8 附帶的是 QtWebkit 2.2)。
Qt 擴展模塊則有更多的選擇:服務器
- Qt 3D,提供聲明式語法,在 Qt 程序中能夠簡單地嵌入 3D 圖像。Qt 3D 爲 Qt Quick 添加了 3D 內容渲染。Qt 3D 提供了 QML 和 C++ 兩套 API,用於開發 3D 程序。
- Qt Bluetooth,提供用於訪問藍牙無線設備的 C++ 和 QML API。
- Qt Contacts,用於訪問地址簿或者聯繫人數據庫的 C++ 和 QML API。
- Qt Concurrent,封裝了底層線程技術的類庫,方便開發多線程程序。
- Qt D-Bus,這是一個僅供 Unix 平臺使用的類庫,用於利用 D-Bus 協議進行進程間交互。
- Qt Graphical Effects,提供一系列用於實現圖像特效的類,好比模糊、銳化等。
- Qt Image Formats,支持圖片格式的一系列插件,包括 TIFF、MNG、TGA 和 WBMP。
- Qt JS Backend,該模塊沒有公開的 API,是 V8 JavaScript 引擎的一個移植。這個模塊僅供 QtQml 模塊內部使用。
- Qt Location,提供定位機制、地圖和導航技術、位置搜索等功能的 QML 和 C++ API。
- Qt OpenGL,方便在 Qt 應用程序中使用 OpenGL。該模塊僅僅爲了程序從 Qt 4 移植到 Qt 5 的方便才保留下來,若是你須要在新的 Qt 5 程序中使用 OpenGL 相關技術,須要使用的是 QtGui 模塊中的 QOpenGL。
- Qt Organizer,使用 QML 和 C++ API 訪問組織事件(organizer event)。organizer API 是 Personal Information Management API 的一部分,用於訪問 Calendar 信息。經過 Organizer API 能夠實現:從日曆數據庫訪問日曆時間、導入 iCalendar 事件或者將本身的事件導出到 iCalendar。
- Qt Print Support,提供對打印功能的支持。
- Qt Publish and Subscribe,爲應用程序提供對項目值的讀取、導航、訂閱等的功能。
- Qt Quick 1,從 Qt 4 移植過來的 QtDeclarative 模塊,用於提供與 Qt 4 的兼容。若是你須要開發新的程序,須要使用 QtQuick 模塊。
- Qt Script,提供腳本化機制。這也是爲提供與 Qt 4 的兼容性,若是要使用腳本化支持,請使用 QtQml 模塊的 QJS* 類。
- Qt Script Tools,爲使用了 Qt Script 模塊的應用程序提供的額外的組件。
- Qt Sensors,提供訪問各種傳感器的 QML 和 C++ 接口。
- Qt Service Framework,提供客戶端發現其餘設備的服務。Qt Service Framework 爲在不一樣平臺上發現、實現和訪問服務定義了一套統一的機制。
- Qt SVG,提供渲染和建立 SVG 文件的功能。
- Qt System Info,提供一套 API,用於發現系統相關的信息,好比電池使用量、鎖屏、硬件特性等。
- Qt Tools,提供了 Qt 開發的方便工具,包括 Qt CLucene、Qt Designer、Qt Help 以及 Qt UI Tools 。
- Qt Versit,提供了對 Versit API 的支持。Versit API 是 Personal Information Management API 的一部分,用於 QContacts 和 vCard 以及 QOrganizerItems 和 iCalendar 之間的相互轉換。
- Qt Wayland,僅用於 Linux 平臺,用於替代 QWS,包括 Qt Compositor API(server)和 Wayland 平臺插件(clients)。
- Qt WebKit,從 Qt 4 移植來的基於 WebKit1 和 QWidget 的 API。
- Qt Widgets,使用 C++ 擴展的 Qt Gui 模塊,提供了一些界面組件,好比按鈕、單選框等。
- Qt XML,SAX 和 DOM 的 C++ 實現。該模塊已經廢除,請使用 QXmlStreamReader/Writer。
- Qt XML Patterns,提供對 XPath、XQuery、XSLT 和 XML Schema 驗證的支持。
這裏須要強調一點,因爲 Qt 的擴展模塊並非 Qt 必須安裝的部分,所以 Qt 在將來版本中可能會提供更多的擴展模塊,這裏給出的也僅僅是一些如今肯定會包含在 Qt 5 中的一部分,另外還有一些,好比 Qt Active、Qt QA 等,則可能會在 beta 及之後版本中出現。網絡
Qt 4 也分紅若干模塊,可是這些模塊與 Qt 5 有些許多不一樣。下面是 Qt 4 的模塊:多線程
- QtCore,Qt 提供的非 GUI 核心類庫,這一部分與 Qt 5 大體相同,只不過 Qt 4 的 core 類庫中並不包含 JSON、XML 處理等。
- QtGui,圖形用戶界面組件,這個模塊至關於 Qt 5 的 QtGui 與 QtWidgets 兩個模塊的總和。
- QtMultimedia,多媒體支持,相似 Qt 5 的相關部分。
- QtNetwork,網絡支持,相似 Qt 5。
- QtOpenGL,提供對 OpenGL 的支持。在 Qt 5 中,這部分被移植到 QtGui 模塊。
- QtOpenVG,提供對 OpenVG 的支持。
- QtScript,提供對 Qt Scripts 的支持。Qt Script 是一種相似於 JavaScript 的腳本語言。在 Qt 5 中,推薦使用 QtQml 的 JavaScript 部分。
- QtScriptTools,爲 Qt Script 提供的額外組件。
- QtSql,提供對 SQL 數據庫的支持。
- QtSvg,提供對 SVG 文件的支持。
- QtWebKit,提供顯示和編輯 Web 內容。
- QtXml,XML 處理,這部分在 Qt 5 中被添加到了 QtCore。
- QtXmlPatterns,提供對 XQuery、XPath 等的支持。
- QtDeclarative,用於編寫動畫形式的圖形用戶界面的引擎。
- Phonon,多媒體框架。
- Qt3Support,Qt 3 兼容類庫。
- QtDesigner,用於擴展 Qt Designer。
- QtUiTools,用於在本身的引用程序中處理 Qt Designer 生成的 form 文件。
- QtHelp,聯機幫助。
- QtTest,單元測試。
- QAxContainer,用於訪問 ActiveX 控件。//專門供 Windows 平臺的模塊
- QAxServer,用於編寫 ActiveX 服務器。//專門供 Windows 平臺的模塊
- QtDBus,使用 D-Bus 提供進程間交互。//專門供 Unix 平臺的模塊
QT——關鍵概念
信號和槽
信號和槽原理:對象之間的通訊機制,是QT對C++的擴展,組件中QT預約義的槽和信號 架構
如:QPushButton中預約義信號 框架
lvoid clicked ( bool checked = false )
lvoid pressed ()
lvoid released ()
lvoid toggled ( bool checked )
QPushButton中預約義槽:void setChecked ( bool )
元對象系統 (meta-object system)
信號-槽(signal-slot)
內省(introspection)
工做機制
Q_OBJECT宏聲明瞭在每個QObject子類中必須實現的一些內省函數:metaObject()、tr()、qt_metacall()……
Qt的moc工具生成了用於由Q_OBJECT聲明的全部函數和全部信號的實現。
像connect()和disconnect()這樣的QObject的成員函數使用這些內省函數來完成它們的工做。
- QObject::metaObject() 可以返回與類相關的元對象。
- nQMetaObject::classNmae() 可以在不須要實時類型信息(Run-Time Type Information, RTTI)支持的狀況下實時返回字符串類型的類名。適合調試。
- nQObject::inherits() 可以判斷一個類是否繼承於另外一個類。
- nQObject::tr()和QObject::trUtf8()可以爲本地化提供字符串翻譯。
- nQObject::setProperty()和QObject::property() 可以根據名字動態地設置或獲取屬性。
- nQObject::qobject_cast() 可以支持動態類型轉換。