本篇為QWebView應(yīng)用的擴(kuò)展,除了之前的QWebView相關(guān)知識(shí),還涉及到QPainter及QPaintEvent的應(yīng)用。本篇實(shí)現(xiàn)的效果為google map的夜視(night-mode)功能,如下圖
實(shí)現(xiàn)night-mode的原理涉及到反色等知識(shí),不過編寫起來卻十分簡單。你可以嘗試打開“畫圖”等圖片編輯工具,然后選中反色,得到的效果即我們現(xiàn)在要完成的。
在QWebView的反色處理上,我們通過重寫paintEvent函數(shù)實(shí)現(xiàn):
1.首先調(diào)用QWebView的paintEvent方法將我們需要顯示的圖片(內(nèi)容)paint好
2.QPaint提供了反色的接口setCompositionMode。它是一系列圖像構(gòu)成的接口,我們選擇QPainter::CompositionMode_Difference實(shí)現(xiàn)整個(gè)畫面的反色效果
3.設(shè)置好反色效果后,調(diào)用fillRect方法填充所需變化的區(qū)域。
完整的代碼為(paintEvent,省略其他變量定義)
void webViewClass::paintEvent(QPaintEvent *event)
{
QWebView::paintEvent(event);
if(isNightMode)
{
QPainter p(this);
//p.setBackgroundMode(Qt::OpaqueMode);
p.setCompositionMode(QPainter::CompositionMode_Difference);
p.fillRect(event->rect(), Qt::white);
}
}
其中在fillRect中,因?yàn)?/span>CompositionMode_Difference模式指的是一種異或(xor)運(yùn)算,因?yàn)?/span>white的顏色是全1,所以和原有圖像的運(yùn)算結(jié)果剛好是按位取反的功能,做到了反色效果。
聯(lián)系客服