Qt5 新特性

http://www.devbean.net/2012/05/qt5-features/?replytocom=1161html

Qt 5 已經臨近發佈,其最大的特色就是模塊化。將原來龐大的模塊更細分爲不一樣的部分,同時,一個大版本的升級,固然少不了添加、刪除各個功能類。文本簡單介紹 Qt5 的特性,其具體內容來自 Qt5 官方 Wiki 的介紹git

前面說過,Qt5 最大的特性在於模塊化。這麼多的模塊,Qt5 統稱爲 Qt Essentials。下面就來看看這些模塊到底是什麼吧!注意,有些模塊沒有在這裏列出,例如 SQL 等。請在這裏查看完整的 Qt5 模塊列表。正則表達式

【2012年10月30日】重要更新數據庫

根據 QTBUG-27736 作出的決定,如下模塊將從 Qt 5 中移除。「移除」的含義是,這些模塊將不屬於 Qt 5 的一部分,可是可能會做爲額外的附加功能提供。這些模塊是:canvas

  • qt3d
  • qtconnectivity
  • qtfeedback
  • qtlocation
  • qtpim
  • qtsensors
  • qtsystems
  • qtwayland

所以,在閱讀本文其它部分時,請注意這項最新修改!後端

Qt Core

Qt Core 相似於 Qt4 中的 QtCore 模塊,包含了全部非 GUI 的功能。全部其餘的 Qt 模塊都基於這個模塊。與 Qt4 的 QtCore 不一樣之處在於,Qt Core 還包括了 XML 等 Qt4 中存在的部分。api

QStandardPaths

QStandardPaths 是 Qt4 的 QDesktopServices 的加強版,其 API 大部分基於 KDE4 的KStandardDirs。這個類提供了比 QDesktopServices 更多的功能,例如在某一存儲位置搜索給定文件等。服務器

MimeTypes

QMimeDatabase 提供了判斷給定文件或內存區塊的 mimetype 的功能,原理是經過擴展名和(或)內容信息。網絡

MIME 類型數據庫由 freedesktop.org 的 shared-mime-info 項目提供。若是在當前系統上找不到 MIME 類型數據庫(例如在大多數 Windows 或 Mac OS X 系統上),Qt 則使用本身的拷貝。框架

JSON 支持

QtCore 如今包含了一系列用於解析和生成 JSON 文檔的類。這些類容許你在 JSON 的內存二進制表現形式和標準文本之間進行相互轉換。這些類的目的固然就是提供 JSON 格式的支持。

編譯器檢查 signal-slot 鏈接

QObject 如今支持一種額外的語法,能夠支持在編譯期對信號槽的鏈接進行檢查,好比 signal 和 接受者是否都存在、參數是否匹配等。目前咱們使用 C++ 模板實現了這一功能,不過當 C++11 得到全面支持以後,使用 C++11 新特性更爲方便。

這種新語法容許將一個信號鏈接到任意 C++ 接受者上,包括 C++11 lambda 表達式,成員函數以及 static 函數。這些接受者沒必要非得聲明爲 slots。

若是感興趣,能夠參考這篇文章獲取更多信息。

兼容 Perl 的正則表達式

Qt5 新增長一個新的類 QRegularExpression,提供兼容 Perl 的正則表達式。這個類比 QRegExp 更強大,速度更快,支持更多特性,例如 lazy 和 possessive 謂詞、lookbehinds、具名捕獲組 named capturing groups 和循環匹配。

Qt Gui

窗口和渲染的新的類

QtGui 新增了一系列新的類,其中最重要的是 QWindow,QScreen,QSurfaceFormat 和 QOpenGLContext。這些都做爲 QtWidgets 模塊的後端,以及直接供 QtQuick 2 使用。

等價於 Qt4 的 QtOpenGL 模塊的一系列類

在 Qt 4 的 QtOpenGL 模塊中最有用的類被移動到 QtGui 模塊中了,例如 QOpenGLFramebufferObject、QOpenGLShaderProgram、QOpenGLFunctions 等等。

用於替換 QGLContext 的 QOpenGLContext 則更爲通用,從 QWindow 中分離出來,支持更多用例,例如爲不一樣界面使用相同上下文。

QOpenGLPaintDevice

咱們沒有將 QWindow 和 QOpenGLFramebufferObject 做爲 QPaintDevice 的子類,而是提供了一個新的 QOpenGLPaintDevice 類,使得可使用 QPainter 渲染當前邊界的上下文更簡單和靈活。

Qt Network

QDnsLookup

如今,使用 Qt5 提供的 QDnsLookup API 能夠查詢 DNS 記錄了。這個類並非爲了替換掉 QHostInfo,後者仍然具備根據 IP 地址獲取主機名的 API。QDnsLookup 更主要的是用於其它形式的 DNS 記錄,例如 SRV、TXT 以及 MX。這其實是替代了已經被廢棄的 Q3Dns API。

改進對 IPv6 和 dual mode 網絡的支持

許多應用程序使用主機名和網絡層的透明協議來提供對 IPv6 的透明支持。綁定到 QHostAddress::Any 的 QTcpServer 和 QUdpSocket 能夠同時支持 IPv4 和 IPv6 鏈接。

QHostAddress::AnyIPv4 和 QHostAddress::AnyIPv6 則提供了單一協議的支持。使用 QNetworkAccessManager 的外出鏈接則會同時嘗試 IPv4 和 IPv6,直到有一個成功了。這將會幫助開發某一環境下某種協議受限狀況下的程序開發。

綁定 TCP socket

QTcpSocket 如今能夠在鏈接前綁定到某一 IP 地址,這使得在多穴環境下限制鏈接到特定接口成爲可能。

移除 QFtp 和 QHttp API

Qt5 移除了 QHttp API,緣由是功能重複。QNetworkAccessManager 足以提供相似的功能。

Qt5 移除了 QFtp API,緣由是其實現質量。QNetworkAccessManager 能夠用來提供 ftp url 的上傳下載操做。

這些 API 將由某一易於遷移的獨立形式提供。

SSL 證書擴展

Qt5 增長了訪問 SSL 認證的擴展,這將方便 Qt 框架開發人員,同時做爲將來的 Qt SSL 支持的基礎。

SSL 證書驗證

Qt5 增長了對 SSL 證書的驗證工具鏈,而不只僅是當鏈接到 SSL 服務器時才進行的操做。

Buggy SSL 服務器的周邊工做

Qt5 增長了對 buggy SSL 服務器的支持。這些修改如今已經被添加到了 Qt 4.8。

支持 opaque Private Key

這使得應用程序能夠從 PKCS#11 加密狗這樣的設備讀取 private key,參見 http://git.iksaif.net/?p=qsslkey-p11.git;a=tree

Qt 3D

Qt 3D 是 Qt 5.0 新增模塊,雖然它在實驗室項目中已經存在好幾年,也向 Qt 貢獻了不少代碼。像 QMatrix4×四、QGLShaderProgram 和 QVector3D 這些類,都是來自 Qt 3D 項目的。Qt3D 基於 QML2 和 Qt OpenGL 的支持。

Qt3D 包含兩個庫:

  • Qt3DQuick – 使用 QML 處理 3D 內容,基於 OpenGL
  • Qt3D – 支持 Qt3DQuick 的 C++ 類,也能夠直接使用

如今,Qt3D 包含:

  • GL 渲染,包括基本的光照
  • 3D 場景管理
  • 加載 3D 資源,例如 .obj 和 .3ds 文件
  • stock 形狀
  • 幾何形狀的加載和管理
  • 紋理和材質
  • 簡單的幾何動畫
  • camera 和 view

上面這些特性都由 QML API 提供。結合 QML 還能夠:

  • 建立內聯的或者從源文件加載陰影,自動綁定到 QML 屬性
  • 使用 QML scoping 建立 3D 場景
  • 將曲線動畫這種聲明式代碼同 3D 狀態結合在一塊兒

Qt Location

Qt Location 是 Qt 5.0 新增模塊,雖然它幾年前就是 Qt Mobility 的一部分。相比於 Qt Mobility 提供的版本,Location API 則有下面的幾點改變:

  • 如今的地圖是 QML2 場景圖的一部分,直接使用直接 OpenGL 的硬件渲染
  • 使用 MapQuickItem 能夠向地圖添加任意 QML2 item
  • 基於 QML model 建立支持 model-view 的地圖對象
  • 內置縮放手勢、剪切和加速度感應
  • 大幅提高性能,特別是大地圖的多邊形和通常對象
  • 支持旋轉和地址匹配的完整 QML API——兼容標準的 QML model-view 設計
  • 不須要打開全部插件,便可檢查全部支持的特性
  • 能夠簡單設置的 PluginParameters 的適用於旋轉、地位、地圖的贊成的「Plugin」QML 元素
  • Landmarks API 被 Places API 取代:
    • 提供相同功能的 C++ 和 QML API
    • 支持查看更加豐富的內容(例如圖像、可編輯區域等)的新 API
    • 支持本地化、搜索結果、同義詞的新 API
    • 支持訪問 Places REST 服務的 REST 插件
    • 支持保存本地書籤的 JsonDb 插件

鼠標輸入

支持遊戲鼠標提供的額外按鍵

如今,不少遊戲鼠標提供了遠多於左右鍵和滾輪的按鍵。Qt 應用程序能夠接受來自更多鼠標按鍵的 Button 事件:在 XCB、XLIB 或 DirectFB 上達 27 個鼠標鍵;在 Wayland、Evdev 或 OS X 上達 16 個鼠標鍵;在 Blackberry/QNX 上達 8 個鼠標鍵。Qt 的 Windows 版本只能支持 5 個鼠標鍵,這是受 Windows 平臺限制的。

QtQuick

QtQuick 2.0 是一個重大升級。

SceneGraph 渲染器

QtQuick 2 基於 OpenGL 場景。下面的類直接替換掉 QtQuick 1 中的同名類:

  • QQuickView
  • QQuickCanvas
  • QQuickItem
  • QQuickPaintedItem

改進 QML 引擎和語言

  • JS 引擎改變爲 V8。
  • 處理器和編譯器優化。
  • 新的綁定優化器。
  • ValueType 改進:
    • QColor 如今做爲一個值類型。紅、綠、藍和 alpha 通道的值由 「r」、「g」、「b」 和 「a」 屬性得到
    • 改進對 QVector4D 的支持,如今在 QML 中可使用 Qt.vector4d() 進行構建
  • 經過 Module API 能夠將任意功能放置在 namespace 中。參考 qmlRegisterModuleApi()。
  • JavaScript (.js) 文件如今能夠引入 QML 模塊以及其餘 JavaScript 文件。
  • 新增屬性類型 var,淘汰舊的 variant 屬性類型。var 類型的屬性能夠保存 JavaScript 引用。
  • QML 的屬性類型 var 和 variant 能夠保存 pixmap。
  • QQmlExpression 能夠直接(更有效率)由 QQmlScriptString 構建。
  • 改進對特定順序存儲類型(QList<int>、QList<qreal>、QList<bool>、QList<QUrl>、QList<QString> 和 QStringList)的支持。
  • QObjects 能夠爲這些類型定義 Q_PROPERTY,這樣就能夠直接在 JavaScript 中進行訪問。

Canvas

新增相似 HTML5 canvas API 的對象 Canvas,提供幾點加強:

  • 支持 2 種渲染目標:Canvas.Image 和 Canvas.FramebufferObject
  • 支持後臺線程渲染
  • 支持 canvas 層疊渲染

Canvas 支持大多數 HTML5 context2d API,具體細節能夠查看 canvas 文檔。

粒子系統

QtQuick.Particles 2.0 模塊包含了能夠組成 2D 粒子的元素。

元素 API/行爲 的改變

  • 新增 SpriteImage 元素,用於渲染動畫精靈,能夠經過動畫改變,它使用 Sprite 元素表現每一幀動畫。
  • MouseArea 新增能夠專遞給 pressed 事件 clicked、doubleClicked 和 pressAndHold 等不一樣類型。其順序是在具備處理器的 MouseArea 中從上往下傳遞。你也能夠在處理函數中忽略這些事件,讓它們繼續傳遞。這種行爲經過新的屬性 propagateComposedEvents 觸發。
  • 綁定元素新增能夠做爲值來源使用;若是它的 when 屬性爲 false 時,也會保存任意早期的綁定。
  • Flickable:增長 dragging、draggingHorizontally 和 draggingVerically 屬性。新增 topMargin、bottomMargin、leftMargin、rightMargin、xOrigin、yOrigin 屬性。
  • Image 新增兩個屬性:horizontalAlignment 和 verticalAlignment。新增 fillMode 一個合法值 Image.Pad,表示不改變圖像形狀。設置 Image sourceSize.width 和 sourceSize.height 會將圖像顯示爲指定大小,保持長寬比。
  • Grid 增長 rowSpacing 和 columnSpacing 屬性。positioner 的 spacing 屬性類型由整型改成浮點型。
  • positioner(Row、Column、Grid、Flow)的改進:
    • 爲 add 和 move 使用的過渡改進功能:能夠訪問 ViewTransition 屬性,可使用任意屬性做爲動畫(不只僅是位置)。
    • positioner 中的 item 如今具備附件屬性,用於定位子元素位置:Positioner.index、Positioner.isFirstItem、Positioner.isLastItem。
  • Loader 的改進:
    • 增長 active 屬性,容許延遲 Loader 元素 item 屬性的實例化。
    • 增長 setSource(JSObject) 函數,容許將屬性初始化爲特定值(相似component.createObject())
    • source 改變時發出 sourceChanged 信號;sourceComponent 改變時發出 sourceComponentChanged 信號。在前些版本,這兩個屬性任意一個改變時,都會同時發出這兩個信號。
    • 增長 asynchronous 屬性,下降組件初始化時的卡頓。
    • 若是 source 被設置爲 asynchonous: true,則組件將會在後臺線程編譯,
  • Text 的改進:
    • 每一次增長新的行,都會調用 onLineLaidOut 處理函數。這使得咱們可以改變行的位置和大小。
    • 新政 doLayout 函數,用於從 JavaScript 觸發佈局。
    • 當 textFormat 設置爲 AutoText 時,自動轉換爲 StyledText 而不是 RichText,
  • TextEdit – textFormat 屬性的默認值爲 PlainText 而不是 AutoText。
  • TextInput 增長 wrapMode 和 verticalAlignment 屬性,同時 positionAt 函數增長一個 y 參數。
  • PathView 增長 currentItem 和 maximumFlickVelocity 屬性。
  • ListView 和 GridView 的改進:
    • 當元素在 view 中增長、刪除或移動時,能夠應用特殊的變換。
    • 增長 headerItem 和 footerItem 屬性(實例化爲 header 和 footer)。
    • 在 RightToLeft 佈局下,preferredHighlightBegin/End 一樣倒轉。
    • ListView 增長 section.labelPositioning 屬性,容許將當前 section label 保持在 view 的開始處或將下一 section label 保持在 view 的結尾處。
  • 新增用於構建路徑的 PathArc、PathCurve、PathSvg。

QtQuick 1 做爲獨立的庫和模塊

使用 QtQuick 1 的特定 API 編寫 C++ 應用程序,例如 QDeclarativeView 或 QDeclarativeItem 必須在 .pro 文件中添加 quick1 模塊,例如 QT += quick1。

QDeclarativeView 和 QDeclarativeItem 頭文件如今位於 QtQuick 1模塊,例如:

Language:  C++ (Qt)
0
1
#include <QtQuick1/QDeclarativeView>
#include <QtQuick1/QDeclarativeItem>
相關文章
相關標籤/搜索