[Qt教程] 第52篇 從Qt 4到Qt 5(二)Qt 5框架介紹


該文章原創於Qter開源社區(www.qter.org),作者yafeilinux,轉載請註明出處!

轉載自:點擊打開鏈接http://bbs.qter.org/forum.php?mod=viewthread&tid=934&extra=page%3D1


導語

       上一節已經安裝好Qt 5.2,並將一個Qt 4程序遷移到了Qt 5上。其中我們講到Qt 5QApplication類已經不在QtGui模塊中了,而且所有的Qt 5圖形界面程序都必須在.pro項目文件中添加widgets模塊。那麼到底Qt 5中對模塊進行了哪些改動,Qt 5的框架又是怎樣的?這一節將和大家一起看一下這些內容。


目錄


一、在幫助中查看所有模塊
二、Qt基本模塊框架
三、圖形界面庫框架
四、QtQmlQtQuick框架




正文


一、在幫助中查看所有模塊


       打開Qt Creator,進入其幫助模式,然後選擇目錄方式進行查看,打開“Qt 5.2.0ReferenceDocumentation”頁面。在這裏提供了Qt5.2的整體介紹,並將其所有內容進行了分類。我們選擇右下角的“All Qt Modules”來查看所有的Qt模塊。如下圖所示。

01.jpg



       在所有模塊頁面,將Qt的模塊分爲了三部分:Qt 基本模塊(Qt Essentials)、Qt擴展模塊(Qt Add-Ons)和Qt工具(Qt Tools)。Qt基本模塊中包含了Qt核心基礎的功能,這個我們會在後面詳細講解;而Qt擴展模塊包含了以前QtMobility中的一些與移動有關的模塊,如藍牙QtBluetooth、傳感器QtSensors等。還包含了以前Qt 4中的一些模塊,例如QtDBusQtXMLQtScript等。除此之外,還新添了一些模塊,例如圖形效果QtGraphicalEffects、串口Qt Serial Port、還有出現在商業版中的Qt3D等。這些模塊都是有特殊用途的,它們很多需要在特殊的平臺上纔可使用。在擴展模塊中我們也看到了Qt Print Support打印支持模塊,它是以前很多類的重組模塊;在Qt工具中包含了Qt設計器、Qt幫助和Qt界面工具三部分內容。如下圖所示。


02.jpg



二、Qt基本模塊框架


       Qt基本模塊中定義了適用於所有平臺的Qt基礎功能,在大多數Qt應用程序中需要使用該模塊中的提供的功能。Qt基本模塊的底層是QtCore模塊,其他所有模塊都依賴於該模塊,這也是爲什麼我們總可以在.pro文件中看到QT += core的原因了。整個基本模塊的框架如下圖所示。



03.jpg


       最底層的是QtCore,它提供了元對象系統、對象樹、信號槽、線程、輸入輸出、資源系統、容器、動畫框架、JSON支持、狀態機框架、插件系統、事件系統等等所有基礎功能。該模塊的重要性不言而喻。在其之上,直接依賴於QtCore的是QtTestQtSqlQtNetworkQtGui四個模塊,其中測試模塊QtTest和數據庫模塊QtSql是相對獨立的,而更加重要的是網絡模塊QtNetwork和圖形模塊QtGui,在它們兩個之上便是Qt 5的重要更新部分QtQmlQtQuick。而最上層的是新添加的QtMultiMedia多媒體模塊,和在其之上的QtWebKit模塊。

       對於整個框架,大家可以理解爲下層模塊爲上層模塊提供支持,或者說上層模塊包含下層模塊的功能。舉個例子,例如QtWebKit模塊,它既有圖形界面部件也支持網絡功能,還支持多媒體應用。對於其他模塊,我們這裏就不再深入介紹,下面主要來講解一下其中最重要的QtGui模塊。



三、圖形界面庫框架


       現在再回到開頭的問題,我們已經發現QApplication不在QtGui模塊中了,其實不僅如此,就連所有用戶界面的基類QWidget也不在QtGui模塊中了,它們被重新組合到了一個新的模塊QtWidgets中。Qt 5的一個重大更改就是重新定義了QtGui模塊,它不再是一個大而全的圖形界面類庫,而是爲GUI圖形用戶界面組件提供基類,包括了窗口系統集成、事件處理、OpenGLOpenGL ES集成、2D繪圖、基本圖像、字體和文本等內容。在Qt 5中將以前QtGui模塊中的圖形部件類移動到了QtWidgets模塊中,將打印相關類移動到了Qt Print Support模塊中。不過Qt 5中去掉了QtOpenGL模塊,而將OpenGL相關類移動到了QtGui模塊中。有的讀者可能發現在Qt擴展模塊中依然有QtOpenGL模塊,其實它只是爲了便於Qt 4Qt 5移植才保留的,在編寫Qt 5程序時依然強烈推薦使用QtGui模塊中的OpenGL類。瞭解了圖形庫的大體更改,下面我們來看一下Qt圖形界面庫的整體框架。如下圖所示。



04.jpg



       在各種支持的平臺之上是底層的平臺抽象層QPA,這個就是被稱作LightHouse的燈塔項目,它是Qt可以無處不在的基礎。而在其上的所有藍色組塊都是QtGui模塊的內容,它們被分爲了兩類,一類以OpenGL爲核心,它是現在最新的QtQuick2QtWebkit的基礎;一類是以輔助訪問和輸入方式爲基礎的一般圖形顯示類,它們是經典QWidget部件類和QtQuick1的基礎。



四、QtQmlQtQuick框架


       如果要問Qt 5最大的更新和特色是什麼,那非QtQmlQtQuick莫屬。其實,在Qt 4.7的時候就已經有QtQuick了,不過它在那個時候並不成熟。只有到現在的Qt 5qmlquick才發展壯大,逐漸規範起來,並且擁有了與QWidget平分秋色的地位。大家可能已經瞭解到,qmlquick是爲移動設備而生的,並且是今後Qt發展的方向。

QtQuick在Qt 4中是這樣定義的:Qt Quick 是一種高級用戶界面技術,使用它可輕鬆地創建供移動和嵌入式設備使用的動態觸摸式界面和輕量級應用程序。三種全新的技術共同構成了 Qt Quick 用戶界面創建工具包:一個改進的Qt Creator IDE、一種新增的簡便易學的語言 (QML) 和一個新加入 Qt 庫中名爲QtDeclarative 的模塊,這些使得 Qt 更加便於不熟悉 C++ 的開發人員和設計人員使用。

不過在Qt 5中將以前的QtQuick分爲了兩大部分: 一部分是QtQml,它提供了一個QML語言框架,定義並實現了語言引擎基礎,還提供了便於開發者使用的API,實現使用自定義類型來擴展QML語言以及將JavaScript和C++集成到QML代碼中。另一部分是新的QtQuick,它是一個用於編寫QML程序的標準庫,它提供了使用QML創建用戶界面程序時需要的所有基本類型。

在Qt 5中已經很明瞭地分離了qml和quick,使得我們可以對這項新技術擁有更加清楚地認識。與其說這是一項新技術,不如說這是Qt創造的一個新的語言和類庫,請允許在這裏打個不太科學的比方:qml就好比是C++語言,那麼quick就是Qt庫,Qt庫是用C++語言編寫的一個類庫,而quick就是用qml語言編寫的一個類庫,只不過在qml的世界裏,沒有類這個叫法而已。

QtQml和QtQuick的框架如下圖所示。


05.jpg



       可以看到QtQmlQtQuick是獨立的兩部分: QtQmlQtCore爲基礎,擁有QtNetwork的相關功能,然後搭建在了V8V4兩個JavaScript引擎上,V8大家應該已經熟知了,而V4是一個輕量級的JavaScript引擎。不過這裏需要提及一下,在最新的Qt 5.2版本中,V8已經完全被一個新的Qt專有引擎代替了,原因是V8適用於瀏覽器卻不太適用於qml。我們也可以看到QtQml本身並沒有涉及圖形顯示的內容;QtQuickQPA爲基礎,而後經過了QtGuiOpenGLScene graph三層封裝,這裏可以看到,新的QtQuick是建立在OpenGL之上的,並且使用了新的Scene graph進行圖形渲染。很明顯,QtQuick就是用於圖形顯示的。



結語


        Qt 4Qt 5,整個框架進行了優化調整,目的就是爲了達到更好的性能和以後進一步地擴展。可以發現,OpenGLWebKit在整個框架中佔有舉足輕重的地位,不過在不遠將來的Qt 5.3Chromium將代替WebKit成爲QtWeb引擎,因爲Chromium提供了更好的跨平臺性和其他一些易用性。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章