第3章 Qt編程基礎
Qt(發音為“cute”,而不是“cu tee”)是一個跨平臺框架,通常用作圖形工具包,不過它在創建命令行(CLI)應用程序方面非常出色。它可以運行在3個主要的桌面操作系統(Windows、Linux和Mac)以及移動設備操作系統(如Symbian、Android和iOS等)上。
Qt 5與Qt 4最大的區別之一是底層架構修改了。Qt 5引入了模塊化的概念,將眾多功能細分到幾個模塊之中。Qt 4也有模塊的概念,不過是一種很粗略的劃分,而Qt 5則更加細化。這里對Qt5的模塊做一個簡單的介紹,以便于大家根據需要的功能找到正確的模塊。
Qt 5模塊分為Essentials Modules和Add-on Modules兩部分。前者是基礎模塊,在所有平臺上都可用;后者是擴展模塊,建立在基礎模塊的基礎之上,在能夠運行Qt的平臺之上可以酌情引入。
Qt基礎模塊分為以下幾個:
(1)Qt Core,提供核心的非GUI功能,所有模塊都需要這個模塊。這個模塊的類包括動畫框架、定時器、各個容器類、時間日期類、事件、IO、JSON、插件機制、智能指針、圖形(矩形、路徑等)、線程、XML等。所有這些類都可以通過#include <QtCore>頭文件來引入。
(2)Qt GUI,提供GUI程序的基本功能,包括與窗口系統的集成、事件處理、OpenGL和OpenGL ES集成、2D圖像、字體、拖放等。這些類一般由Qt用戶界面類在內部使用,當然也可以用于訪問底層的OpenGL ES圖像API。Qt GUI模塊提供的是所有圖形用戶界面程序都需要的通用功能。
(3)Qt Multimedia,提供視頻、音頻、收音機以及攝像頭等功能。這些類可以通過#include<QtMultimedia>引入,需要在pro文件中添加QT+=multimedia。
(4)Qt Network,提供跨平臺的網絡功能。這些類可以通過#include <QtNetwork>引入,需要在pro文件中添加QT+=network。
(5)Qt QML,提供了供QML(一種腳本語言,也提供了JavaScript的交互機制)使用的C++ API。這些類可以通過#include <QtQml>引入,需要在pro文件中添加QT+=qml。
(6)Qt Quick,允許在Qt/C++程序中嵌入Qt Quick(一種基于Qt的高度動畫的用戶界面,適合于移動平臺開發)。這些類可以通過#include <QQuickView>引入,需要在pro文件中添加QT+=quick。
(7)Qt SQL,允許使用SQL訪問數據庫。這些類可以通過#include <QtSql>引入,需要在pro文件中添加QT+=sql。
(8)Qt Test,提供Qt程序的單元測試功能。這些類可以通過#include <QtTest>引入,需要在pro文件中添加QT+=testlib。
(9)Qt WebKit,基于WebKit2的實現以及一套全新的QML API(順便說一下,Qt 4.8附帶的是Qt WebKit 2.2)。
Qt擴展模塊分為以下幾個:
(1)Qt 3D,提供聲明式語法,在Qt程序中可以簡單地嵌入3D圖像。Qt 3D為Qt Quick添加了3D內容渲染。Qt 3D提供了QML和C++兩套API,用于開發3D程序。
(2)Qt Bluetooth,提供用于訪問藍牙無線設備的C++和QML API。
(3)Qt Contacts,用于訪問地址簿或者聯系人數據庫的C++和QML API。
(4)Qt Concurrent,封裝了底層線程技術的類庫,方便開發多線程程序。
(5)Qt D-Bus,這是一個僅供UNIX平臺使用的類庫,用于利用D-Bus協議進行進程間交互。
(6)Qt Graphical Effects,提供了一系列用于實現圖像特效的類,比如模糊、銳化等。
(7)Qt Image Formats,支持圖片格式的一系列插件,包括TIFF、MNG、TGA和WBMP。
(8)Qt JS Backend,沒有公開的API,從V8 JavaScript引擎移植而來。這個模塊僅供QtQml模塊內部使用。
(9)Qt Location,提供定位機制、地圖和導航技術、位置搜索等功能的QML和C++ API。
(10)Qt OpenGL,方便在Qt應用程序中使用OpenGL。該模塊僅僅為了便于程序從Qt 4移植到Qt 5才保留下來,如果需要在新的Qt 5程序中使用OpenGL相關技術,需要使用Qt GUI模塊中的QOpenGL。
(11)Qt Organizer,使用QML和C++ API訪問組織事件(Organizer Event)。Organizer API是Personal Information Management API的一部分,用于訪問Calendar信息。通過Organizer API可以實現從日歷數據庫訪問日歷時間、導入iCalendar事件或者將自己的事件導出到iCalendar。
(12)Qt Print Support,提供了對打印功能的支持。
(13)Qt Publish and Subscribe,為應用程序提供了對項目值的讀取、導航、訂閱等功能。
(14)Qt Quick,從Qt 4移植過來的QtDeclarative模塊,用于提供與Qt 4的兼容。如果需要開發新的程序,需要使用Qt Quick模塊。
(15)Qt Script,提供腳本化機制。這也是為了提供與Qt 4的兼容性,如果要使用腳本化支持,請使用QtQml模塊的QJS*類。
(16)Qt Script Tools,為使用Qt Script模塊的應用程序提供的額外組件。
(17)Qt Sensors,提供訪問各類傳感器的QML和C++接口。
(18)Qt Service Framework,提供客戶端發現其他設備的服務。Qt Service Framework為在不同平臺上發現、實現和訪問服務定義了一套統一的機制。
(19)Qt SVG,提供渲染和創建SVG文件的功能。
(20)Qt System Info,提供的一套API,用于發現系統相關的信息,比如電池使用量、鎖屏、硬件特性等。
(21)Qt Tools,提供了方便Qt開發的工具,包括Qt CLucene、Qt Designer、Qt Help以及Qt UI Tools。
(22)Qt Versit,提供了對Versit API的支持。Versit API是Personal Information Management API的一部分,用于QContacts和vCard以及QOrganizerItems和iCalendar之間的相互轉換。
(23)Qt Wayland,僅用于Linux平臺,用于替代QWS,包括Qt Compositor API(Server)和Wayland平臺插件(Client)。
這里需要強調一點,由于Qt的擴展模塊并不是Qt必須安裝的部分,因此Qt在未來版本中可能會提供更多的擴展模塊。
Qt儼然使得C++具有抗衡Java的能力。本章并不涉及Qt界面設計的具體內容,而是注重介紹Qt編程的通用基礎知識,而這些知識在以后使用Qt的時候經常會碰到。
- 計算思維與算法入門
- Getting Started with Gulp
- Python語言實用教程
- 用案例學Java Web整合開發
- 視窗軟件設計和開發自動化:可視化D++語言
- 一步一步學Spring Boot:微服務項目實戰(第2版)
- 美麗洞察力:從化妝品行業看顧客需求洞察
- Learning Node.js for Mobile Application Development
- Learning Java Lambdas
- Python數據分析與挖掘實戰(第2版)
- 區塊鏈原理與技術應用
- 數據結構:C語言描述(融媒體版)
- Mastering Rust
- Learning ArcGIS Geodatabases
- QlikView for Finance