Qt QRegion裁剪区域实现部分区域刷新 避免闪烁区域太大

本文介绍如何在Qt中使用QRegion优化特定区域的刷新过程,避免图像闪烁问题。通过对比两种方法,详细解释了如何仅刷新边框区域而非整个图像区域,从而提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QRegion为painter指定一个裁剪区域。 

QRegion 是使用 QPainter:setClipRegion ()来限制画图区域。 还有一个 QWidget:repaint()函数,它接受一个 QRegion 参数。QRegion 是最大化降低屏幕区域被repaint更新的最好工具。

我遇到的问题 :我想鼠标左键点击选取下图某个监控视频时,能够加上蓝色的边框,这个时候我刷新一整块方块会出现蓝色边框内的图像闪烁一次的问题,原因就是我这些图像是在repaint函数里不断画的,当我选取该区域时,你把图像区域和边框区域都一块刷新一次了,因此 ,要不闪烁,就至刷新那边框区域,而不是整个长方体实心区域。


//原有方法:
int offset = 1;//偏移值 
QRect  rect = pSelectedWidget->parentWidget()->frameGeometry();//图像区域方块
rect = rect.adjusted(-offset, -offset, offset, offset);//基于坐标将图形区域方块修改扩展为比之前大一像素的新方块
update(rect );//跟新大方块(包含1像素的边框区域)
//改进方法:
QRect rect = pSelectedWidget->parentWidget()->frameGeometry(); //获取图像区域方块
QRegion oldRect(rect);
rect = rect.adjusted(-1, -1, 1, 1);//获取包含边框的图像区域方块,偏移为1 想大于方块整体外延扩大1个像素
QRegion newRect(rect);
QRegion borderRect = newRect.xored(oldRect);//取两块区域都不相交的区域,既仅获得方块的边框区域
update(borderRect);


粘贴几个qt文档里QRegion的几个函数,同个这些函数可以截取你想刷新的区域,然后update刷新就行。

参考资料:
http://m.blog.youkuaiyun.com/article/details?id=50053161

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值