Snail

导航

 

widgetbackingstore

每个顶层widget会对应一个backingstore, 里面所有的子widget都绘到这个backingstore上, 最后在把整个backingstore贴到屏幕上.
按Qt官方文档的说法, 引入backingstore是为了支持局部更新.

如上图, BackingStore可以分为三层: QWidgetBackingStore/QBackingStore/QPlatformBackingStore. 虽然名字中都有"BackingStore", 但是这三层之间并没有继承关系, 只是上层对下层做了一个封装.

最上层的QWidgetBackingStore连接着QWidget和QBackingStore, 充当一个适配器的角色. 用于支持局部更新. 维护了一堆需要重绘制的区域和需要重绘的widget.

中间是QBackingStore, 用于适配QWindow和底层的QPlatformBackingStore, 对QPlatformBackingStore做了个简单的封装.

最底下是QPlatformBackingStore, 从名字上看是为了适配不同的操纵系统. 直接和操纵系统的api打交道, 在windows系统下的实现类是QWindowsBackingStore. QWindowsBackingStore内部会维护一个QImage, 最终的绘制设备直接来这个QImage, 贴到屏幕上的就是这个QImage.

最上层QWidgetBackingStore的绘制设备(PaintDevice)直接来自于最底层的QPlatformBackingStore. widget在绘制的时候会把绘制设备重定向成backingStore的.

posted on 2022-07-31 17:39  Snail-0304  阅读(1002)  评论(0)    收藏  举报