小白自工作就接觸Qt,一直都在使用Qt5.3.1版本,所以沒有經歷過大牛們把項目從Qt4程序到Qt5的煩惱,沒准以后會碰到。對Qt所有的豐富的API表示驚嘆,對於Qt的框架及模塊認識也是極為模糊的,文中有不對之處希望大牛們打臉(雖然臉都已經被打腫了。。。。)
1、Qt的跨平台性(Linux、Unix、、Mac OS、Android、IOS)
簡而言之:Qt的功能是建立在它所支持的平台底層API之上的。
Qt/Windows對應的是GDI(Graphics Device Interface),很容易就知道它是Qt封裝的與GDI交流的API。而GDI是Windows下圖形繪制及顯示的主要API。
Qt/X11同樣是對X Windows的編程接口。Linux本身是沒有操作界面的,目前主流帶有操作界面的Linux系統都是基於X WIndows的,已經列入了Linux發行標准軟件了。X Windows是C/S框架的(就是所有的鼠標事件傳遞到X Windows的服務端處理之后對應在屏幕上顯示內容),Qt/X11使用Xlib直接與X服務器通信的。(GDI是集成到Windows內核的,而X Windows只是Linux系統的應用軟件而已)
Qt/Macintosh就不用說了。Carbon是Mac OS X下應用程序開發環境,包含了應用程序的圖形部分。目前主流的Cocoa好像使用更好。
上圖主要說明的是UI部分,Qt跨平台都是調用本地的圖形風格。
三種操作系統都支持主流的文件系統(文件系統並不是操作系統固有的,文件系統描述的硬盤里面文件存儲和查找的方式),通信都是采用socket框架(socket是網絡時代的產物,那時候的操作系統已經很成熟了)。至此可以大致了解了Qt跨平台的基本原理了。
Qt框架
在Qt幫助里面搜索All modules可以清楚的看到Qt的模塊分布。
Qt Essentials(Qt的基本模塊)這里指的是開發者會經常使用到的穩定模塊。
2.Qt Add-Ons (擴展模塊)擴展模塊中針對移動端做的模塊比較多,常用的Qt Bluetooth、Qt Positioning、Qt Sensors。UI方面的常用的有Qt Graphical Effects、Qt Image Formats、Qt SVG。新增的PC硬件資源的好用的Qt Print Support、Qt Serial Port,原來在多媒體模塊有對Camera、Screen、Audio Device 的支持。Qt XML小白用的表較少,貌似在數據處理方面很好用。Qt Quick Widgets小白非常喜歡,因為小白去年寫的UI基本是基於QWidget的,想擴展Qml界面這個非常方便。對於想在Qt上開發3D的Qt Canva 3D(5.5才有的),這個相對使用OPENGL入門更簡單一些。
還有一些Value-Add、Technology Preview 、 Tool modules都不太影響框架的認識。
基本模塊結構圖
小白這里只列舉了一下常用到的模塊結構分部,詳細的還是需要參考幫助文檔。
在Qt Widgets模塊中,這里說明一下QGraphics Scene與QWidget是Qt兩個不同的UI體系(前者基於OpenGL后者是基於原始的繪圖設機制),發展源頭是不一樣的,詳細可以看下這個博客繪圖設備和Graphics View Framework
圖形界面庫的架構
這個圖里面包含Qt GUI以及Qt Widget的部分組成,其中藍色塊表示包含在GUI模塊中的,可以參考一下上圖中的Qt GUI模塊的功能描述,並不包含所有的顯示部分,想要仔細了解可以查閱幫助文檔。
從這里也可以更加直觀的看到兩個不同的UI體系是怎么架構起來的。需要注意的是,Qt Quick1是從QPainter體系設計出來的。下面我們會對Qt Quick1與Qt Quick2的架構說明。
Qt Qml和Qt Quick 框架
QML:(Qt Meta-Object Language)強調指出這是一種語言,描述應用的聲明式語言,什么語法規則什么啊,目前有很多腳本語言都是描述性的。
Qt Qml:是QML**應用開發以及標准庫的框架**,並且提供了一個接口,允許開發者以自定義類型和繼承Javascrip與C++代碼方式來擴展QML語言。小白的理解就是,我們開發用的QML、Javascript、C++、Html混合編程時所需要的模塊是在這里提供的。它是基於Qt專用引擎開發的(QML解釋器)。
Qt Quick:Qml模塊本書並不涉及顯示,所有的圖形處理都是有Quick模塊來完成。經過了Qt GUI、OpenGL、Scene Graph三層封裝。強調的是如何高效的繪制圖形並按要求創建各種效果。所以里面包含了可視化類型(QML)、交互類型、動畫、模型視圖、粒子特效、渲染特效等。
分清楚這三個概念,來看看Quick1和Quick2的區別。
這里就可以很清楚為什么Quick1只能做一些變形旋轉而沒有更牛的特效了,因為QPainter確實不能做那個,大牛當然可以直接在Qt4下直接使用QOpenGL做特效。
Qt的基本框架這里大致還只是做了概念上的介紹,可以在閱讀過程中查看幫助文檔,邊看變了解具體模塊及模塊中涉及到的類基本介紹。這里主要還是參考的《Qt5 編程入門》。以后還會不斷的修補修補的。。。
---------------------
作者:Spwperlukami
來源:CSDN
原文:https://blog.csdn.net/Spwper/article/details/51316191
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!