1. 程式人生 > >Qt QRegion裁剪區域實現部分割槽域重新整理 避免閃爍區域太大

Qt QRegion裁剪區域實現部分割槽域重新整理 避免閃爍區域太大

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