文档章节

Qt平台抽象层和图形框架

itviewer
 itviewer
发布于 2016/08/28 01:37
字数 741
阅读 636
收藏 0

Qt本身是一个界面框架,虽然也能做很多其它功能,但画图是其主要解决的问题.

Qt只是一个应用程序,意味着其画图实现需要依赖特定操作系统平台,在不同平台需要不同实现.

在Qt5中,为了更好的实现移植性,引入了QPA插件机制,不同的平台使用不同的插件.平台插件需要解决至少两个问题,一是如何画图,如2d,3d,二是往哪里画图,如窗口系统.

在如何画图上,Qt支持基于光栅的2d软件渲染和基于opengl(es)的2d/3d加速渲染,解决了画图问题,如果仅仅时将图形画到屏幕上还不行,还需要指定要画图的窗口,尤其时桌面平台.

在代码库http://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/platforms 中具有以下几个平台

  • android
  • cocoa    
  • direct2d
  • directfb
  • eglfs
  • haiku
  • integrity
  • ios
  • linuxfb
  • minimal
  • minimalegl
  • mirclient
  • offscreen
  • openwfd
  • qnx
  • windows
  • winrt
  • xcb

除上述几个插件,wayland-egl插件在QtWayland模块提供基于wayland的图形渲染.

在嵌入式linux系统里,由于资源受限,使用x机制实现窗口系统比较浪费资源的,于是有下述解决方案:

EGLFS, LinuxFB, KMS, DirectFB, Wayland

无窗口系统

EGLFS

    EGL是opengL(es)和窗口系统的接口,使应用程序可以利用opengL画图并集成在窗口系统中.

eglfs是Qt的一个平台插件,使Qt程序可以利用opengl es画图而无需窗口系统. 这种方式是在支持gpu的嵌入式设备主要采用的方式. 一般需要gpu厂商提供egl和gles驱动模块.

LinuxFB

窗口系统

XCB

即将图形渲染到x窗口

Wayland

即将图形渲染到wayland 合成器窗口

由于wayland依赖egl实现,在一定程度上和硬件平台关联,并且作为一个还不怎么主流的系统,缺乏详细和能及时更新的文档支持,所以目前在linux上构建其支持wayland的环境还时稍有麻烦.

关于Mesa

关于opengl窗口

既然opengl仅用于画图而不包含窗口,那么特定的平台就需要提供给opengl一个接口,从而实现在操作系统的窗口中使用opengl.

不同平台分别如下:

  • WGL – the equivalent Windows interface to OpenGL
  • CGL – the equivalent OS X interface to OpenGL
  • GLX – the equivalent X11 interface to OpenGL
    • AIGLX – an attempt to accelerate GLX

上述接口时opengl和特定平台的接口,而egl是 Khrono 制定的平台独立的opengl es和窗口系统间的接口规范.

Qt可以利用eglfs插件实现直接画图(全屏),或者在有窗口管理系统(如wayland合成器weston或Qtwayland合成器)时,通过窗口画图.前者只能全屏显示一个程序,后者可以实现多进程应用

© 著作权归作者所有

itviewer
粉丝 20
博文 218
码字总数 44686
作品 0
海淀
技术主管
私信 提问
Qt 6 将于 2020 年底发布,时隔八年的大版本更新有哪些看点?

两个月前,Qt 5.13 稳定版正式发布,按照官方提供的发布计划,Qt 5.14 将在今年年底发布,明年中旬推出 Qt 5.15(或许是 Qt 5 的最后一个版本),接着就是可能会在 2020 年底问世的 Qt 6。 ...

局长
08/15
11.1K
19
Qt 4.6 正式版发布

Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有...

红薯
2009/12/02
1K
0
QT 4.8 Beta 发布

来自 Nokia 的跨平台开源框架 Qt 发布 4.8 Beta 版本,融合了平台抽象化的 Lighthouse 分支。 Qt 4.8 Beta 也同时包含了: Qt Quick 1.1 Qt WebKit 2.2 新功能包括: 融合代号为 Lighthouse...

红薯
2011/07/21
2.7K
2
Linux 下的图形库介绍

在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KDE, GNOME等等。 一、Linux 图形领域的基础设施 1.1 X Window X W...

江河海流
2014/04/24
310
0
Qt5及模块架构分析

关于框架 Qt这个框架历史悠久,由于当年桌面操作系统的GUI程序开发比较费劲,一般使用普通语言如c、c++或者平台自身提供的难用框架,windows、Linux、mac各有各的不同机制。1991–Haavard N...

心翔
2016/02/06
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

领域驱动中的“贫血症和失忆症”

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
5分钟前
2
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
15分钟前
2
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
15分钟前
3
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
17分钟前
2
0
Tomcat源码分析二:先看看Tomcat的整体架构

Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server、Service、Connector、Container等组件,接下...

flygrk
20分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部