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合成器)时,经过窗口画图.前者只能全屏显示一个程序,后者能够实现多进程应用