[QT]QT概述

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, serializationfileI/O devicedirectory management, date/time 類。甚至還包括正則表達式的處理功能。
  • 支持 2D/3D 圖形渲染,支持 OpenGL
  • 對象的通訊機制,信號-
  • 方便的事件處理模型
  • 誇平臺的GUI應用程序的支持
  • XML 支持,數據庫,網絡編程,開發工具包,大量的開發文檔

Qt相對於C++增長的特性有 

 

  • 可以強有力地支持對象間通訊的信號與槽機制 
  • 支持可查詢和可設計的動態對象屬性機制 
  • 事件和事件過濾器 
  • 基於上下文的字符串本地化 
  • 可以支持多任務的定時器 
  • 支持按層次檢索的對象樹 
  • 受保護指針 
  • 動態類型轉換 

 

開發工具包 

 

  • 圖形設計器:Qt Designer 
  • 編譯工具:qmake 
  • 本地化工具:Qt Linguist 
  • 幫助文檔:Qt Assistant 
  • 元對象編譯器:moc 
  • 用戶接口編譯器:uic 
  • 資源編譯器:rcc 

 

QT模塊介紹-----頭文件 

Qt 5 與 Qt 4 最大的一個區別之一是底層架構有了修改。Qt 5 引入了模塊化的概念,將衆多功能細分到幾個模塊之中。Qt 4 也有模塊的概念,可是是一種很粗的劃分,而 Qt 5 則更加細化。本節主要對 Qt 5 的模塊進行一個簡單的介紹,以便之後你們須要哪些功能的時候知道到哪一個模塊去尋找。數據庫

Qt 5 模塊分爲 Essentials Modules 和 Add-on Modules 兩部分。前者是基礎模塊,在全部平臺上均可用;後者是擴展模塊,創建在基礎模塊的基礎之上,在可以運行 Qt 的平臺之上能夠酌情引入。編程

Qt 基礎模塊分爲如下幾個:安全

 

  • Qt Core,提供核心的非 GUI 功能,全部模塊都須要這個模塊。這個模塊的類包括了動畫框架、定時器、各個容器類、時間日期類、事件、IOJSON、插件機制、智能指針、圖形(矩形、路徑等)、線程、XML 等。全部這些類均可以經過 <QtCore> 頭文件引入。
  • Qt Gui,提供 GUI 程序的基本功能,包括與窗口系統的集成、事件處理、OpenGL 和 OpenGL ES 集成、2D 圖像、字體、拖放等。這些類通常由 Qt 用戶界面類內部使用,固然也能夠用於訪問底層的 OpenGL ES 圖像 APIQt 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,支持圖片格式的一系列插件,包括 TIFFMNGTGA 和 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 CLuceneQt DesignerQt Help 以及 Qt UI Tools 
  • Qt Versit,提供了對 Versit API 的支持。Versit API 是 Personal Information Management API 的一部分,用於 QContacts 和 vCard 以及 QOrganizerItems 和 iCalendar 之間的相互轉換。
  • Qt Wayland,僅用於 Linux 平臺,用於替代 QWS,包括 Qt Compositor APIserver)和 Wayland 平臺插件(clients)。
  • Qt WebKit,從 Qt 4 移植來的基於 WebKit1 和 QWidget 的 API
  • Qt Widgets,使用 C++ 擴展的 Qt Gui 模塊,提供了一些界面組件,好比按鈕、單選框等。
  • Qt XMLSAX 和 DOM 的 C++ 實現。該模塊已經廢除,請使用 QXmlStreamReader/Writer
  • Qt XML Patterns,提供對 XPathXQueryXSLT 和 XML Schema 驗證的支持。

 

這裏須要強調一點,因爲 Qt 的擴展模塊並非 Qt 必須安裝的部分,所以 Qt 在將來版本中可能會提供更多的擴展模塊,這裏給出的也僅僅是一些如今肯定會包含在 Qt 5 中的一部分,另外還有一些,好比 Qt ActiveQt QA 等,則可能會在 beta 及之後版本中出現。網絡

Qt 4 也分紅若干模塊,可是這些模塊與 Qt 5 有些許多不一樣。下面是 Qt 4 的模塊:多線程

 

  • QtCoreQt 提供的非 GUI 核心類庫,這一部分與 Qt 5 大體相同,只不過 Qt 4 的 core 類庫中並不包含 JSONXML 處理等。
  • 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 內容。
  • QtXmlXML 處理,這部分在 Qt 5 中被添加到了 QtCore
  • QtXmlPatterns,提供對 XQueryXPath 等的支持。
  • QtDeclarative,用於編寫動畫形式的圖形用戶界面的引擎。
  • Phonon,多媒體框架。
  • Qt3SupportQt 3 兼容類庫。 
  • QtDesigner,用於擴展 Qt Designer
  • QtUiTools,用於在本身的引用程序中處理 Qt Designer 生成的 form 文件。
  • QtHelp,聯機幫助。
  • QtTest,單元測試。 
  • QAxContainer,用於訪問 ActiveX 控件。//專門供 Windows 平臺的模塊
  • QAxServer,用於編寫 ActiveX 服務器。//專門供 Windows 平臺的模塊 
  • QtDBus,使用 D-Bus 提供進程間交互。//專門供 Unix 平臺的模塊

 

QT——關鍵概念

信號和槽 

信號和槽原理:對象之間的通訊機制,是QTC++的擴展,組件中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()…… 

Qtmoc工具生成了用於由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() 可以支持動態類型轉換。 

相關文章
相關標籤/搜索