您的位置:首页 > 编程语言 > Qt开发

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

2017-04-21 11:17 555 查看
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.csdn.net/article/details?id=50053161
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: