QT显示机制(五)

原文地址:QT显示机制(五) 作者:blackdream2

绘图的底层操作

LCD屏幕上的每个点都与显示缓冲区中的数据有特定的关系,对16位色的显示缓冲区,每两个字节对应LCD上的一个像素,因此我们只要修改缓冲区某两个地址上的数据就可以改变LCD上这个点的色彩,如果我们能够得到这个显示缓冲区的地址,应用程序编写者就可以抛开驱动程序那些抽象的接口,直接对显示缓冲区操作。Linux上有这种专门的驱动支持就是Framebuffer驱动程序,Framebuffer也就是帧缓冲,驱动程序创建一个缓冲区用做显示buffer。应用程序开发人员可以通过MMAP将Framebuffer设备重新映射,这样我们对LCD的操作就可以象操作一个二位数组一样方便。QT正是这么做的。

QWidget继承了QPaintDevice,通过graphicsContext接口,我们可以方便地得到这个窗体的设备上下文。这一过程是如何实现的呢?

QGfx QWidget::graphicsContext(bool clip_children) const

{

    QGfx qgfx_qws;

    qgfx_qws=qwsDisplay()->screenGfx();  //创建设备上下文

    updateGraphicsContext( qgfx_qws, clip_children );

    return qgfx_qws;

}

Qapplicationqt_get_screen( int display_id, const char *spec )来获得相应的驱动程序。创建驱动程序后调用qt_screen->connect将客户端与FrameBuffer即帧缓冲映射起来,具体代码可以参考QLinuxFbScreen 。当一个窗体就收到PaintEvent事件后就可以创建QPaint对象绘图,通过设备上下文获得的绘图接口实际上都是在对帧缓冲进行操作。 如果驱动程序不支持双缓冲操作的话,绘图的结果将直接显示在LCD上。

 

E-MAIL:auspiciousbird@126.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值