Qt自己是一個界面框架,雖然也能作不少其它功能,但畫圖是其主要解決的問題.html
Qt只是一個應用程序,意味着其畫圖實現須要依賴特定操做系統平臺,在不一樣平臺須要不一樣實現.linux
在Qt5中,爲了更好的實現移植性,引入了QPA插件機制,不一樣的平臺使用不一樣的插件.平臺插件須要解決至少兩個問題,一是如何畫圖,如2d,3d,二是往哪裏畫圖,如窗口系統.android
在如何畫圖上,Qt支持基於光柵的2d軟件渲染和基於opengl(es)的2d/3d加速渲染,解決了畫圖問題,若是僅僅時將圖形畫到屏幕上還不行,還須要指定要畫圖的窗口,尤爲時桌面平臺.ios
在代碼庫http://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/platforms 中具備如下幾個平臺git
除上述幾個插件,wayland-egl插件在QtWayland模塊提供基於wayland的圖形渲染.windows
在嵌入式linux系統裏,因爲資源受限,使用x機制實現窗口系統比較浪費資源的,因而有下述解決方案:框架
EGLFS, LinuxFB, KMS, DirectFB, Waylandui
EGL是opengL(es)和窗口系統的接口,使應用程序能夠利用opengL畫圖並集成在窗口系統中.spa
eglfs是Qt的一個平臺插件,使Qt程序能夠利用opengl es畫圖而無需窗口系統. 這種方式是在支持gpu的嵌入式設備主要採用的方式. 通常須要gpu廠商提供egl和gles驅動模塊.操作系統
即將圖形渲染到x窗口
即將圖形渲染到wayland 合成器窗口
因爲wayland依賴egl實現,在必定程度上和硬件平臺關聯,而且做爲一個還不怎麼主流的系統,缺少詳細和能及時更新的文檔支持,因此目前在linux上構建其支持wayland的環境還時稍有麻煩.
既然opengl僅用於畫圖而不包含窗口,那麼特定的平臺就須要提供給opengl一個接口,從而實如今操做系統的窗口中使用opengl.
不一樣平臺分別以下:
上述接口時opengl和特定平臺的接口,而egl是 Khrono 制定的平臺獨立的opengl es和窗口系統間的接口規範.
Qt能夠利用eglfs插件實現直接畫圖(全屏),或者在有窗口管理系統(如wayland合成器weston或Qtwayland合成器)時,經過窗口畫圖.前者只能全屏顯示一個程序,後者能夠實現多進程應用