这篇文章其实也不算是原创,看了前辈们的资料加上自己的一些理解。在文章末尾,我提供几篇好的资料。
如果有必要那么我们可以使用qvfb开发自己的GUI图形引擎,qvfb是一个模拟/dev/fb0的framebuffer显示方式的应用程序,使用共享内存,外部程序比如minigui传递数据到qvfb建立的共享内存,之后qvfb将数据刷新到qvfb软件界面上,需要注意的是,qvfb并不是严格意义上的framebuffer,当minigui将数据发送到qvfb的共享内存之后,qvfb并不会立即将修改的数据反应到qvfb的软件界面上,
而是需要外部程序,比如minigui,首先设置qvfb创建的共享空间结构体下面的update矩形失效范围,即(left,top)和(right,bottom),
然后设置qvfb创建的共享空间结构体下面的dirty控制字为1,
这样qvfb检测到drity标志为1后,将取出update中待刷新矩形描述区间,然后将update指定
区间中的数据刷新到qvfb界面上,之后qvfb将共享空间的drity标志置0,同时将update设为无效的(0,0)和(-1,-1)
qvfb的原理很简单,它建立了一个system
V共享内存,用户只需将需要显示的图像按像素格式要求放到共享内存里qvfb就可以显示了。
System V共享内存连接的步骤是:
1.通过ftok拿到key
2.使用shmget拿到shmid
3.使用shmat连接到共享内存
这里需要注意的是,key的生成需要向ftok传入一个双方约定好的文件名,对于qvfb屏幕设备,这个文件是/tmp/.qtvfb_mouse-0。
qvfb创建的共享内存包含一个私有的数据头,用于指示像素格式、宽高等信息。这个头结构定义如下:
开发的过程中,我觉得几点比较重要。
1、程序规范
这里的规范不仅仅是风格上面的规范,更重要的为合法性校验,内存泄露问题。
如下代码,我们必须对程序的返回结果进行校验,这样的代码比较健壮。
在main()函数结束之前,我们必须还close打开的设备文件。
2、我的main函数里面有一个while(1)函数,在内部不断从鼠标文件中读取鼠标信息,然后显示到qvfb的屏幕设备上。
在做GUI的开发,往往都有这样的一个流程:
a.往数据地址写数据;
b.更新“framebuffer”
如果像不断显示鼠标信息这样的一个应用,则每次写数据之前都要先clear那块区域
这方面的资料相对比较少,在这里连接上一些好资料的原文地址
1、浅析qvfb图像显示原理和鼠标键盘信息获取方法
2、使用qvfb在X11下开发framebuffer应用程序
3、QVFB
4、Linux下framebuffer及qvfb编程示例
5、Framebuffer Driver
在这里附上程序源代码下载链接:http://download.csdn.net/detail/fzu_dianzi/3718774
以上纯属个人学习笔记,如果哪里错了,希望提出。愿和大家一起共同学习,一起进步。我的邮箱地址是:xzy@yingzhi8.com
分享到:
相关推荐
基于qvfb下开发的鼠标测试程序,能够显示鼠标状态。
基于Qt的系统项目开发 课程设计 毕业设计 供参考 源代码+说明 基于Qt的系统项目开发 课程设计 毕业设计 供参考 源代码+说明 基于Qt的系统项目开发 课程设计 毕业设计 供参考 源代码+说明 基于Qt的系统项目开发 课程...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
qt4源代码编译的qvfb程序,需要单独编译,编译好了,要的拿去吧
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料...基于Qt-qvfb开发的电子点菜系统源码+项目说明.zip
毕业设计 课程设计 系统设计 管理系统开发 C++ QT 源代码 毕业设计 课程设计 系统设计 管理系统开发 C++ QT 源代码 毕业设计 课程设计 系统设计 管理系统开发 C++ QT 源代码 毕业设计 课程设计 系统设计 管理系统...
通过编程实现qvfb自启动
qvfb是QT virtualframebuffer的缩写,是QT在X11下的一个framebuffer仿真器,有了它我们就可以利用X11下众多便利的工具来开发基于framebuffer的应用程序了。qvfb的原理很简单,它建立了一个systemV共享内存,用户只需...
qvfb 安装./configure make makeinstall 测试文件是 直接读写qvfb的虚拟framebuffer (非qt),将buffer画一快红色区域
qvfb安装 1.将qvfb-1.0.tar.gz 拷贝到linux的\arm2410目录下
bmpdis 使用qvfb显示bmp图片的例子
在Ubuntu10.04建立QT-linux-embedded-4.6.3开发环境及编译qvfb
ubuntu minigui qvfb 安装方法
Ubuntu Linux下独立编译QVFB.docx