自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初學(xué)者文檔 QT中窗口刷新事件

移動開發(fā)
對于窗體刷新事件,本文主要談一下paintevent的使用,也許很多人初次使用這個的時候,搞不懂這個是在什么時候被調(diào)用的,現(xiàn)在本文來簡單說明一下。

QT窗口刷新事件是本文介紹的內(nèi)容,經(jīng)多分享過一個星期的項(xiàng)目初步開發(fā),寫此文就開發(fā)時遇到的一些常見問題,給出些資料和自己的觀點(diǎn),希望能給其他的初學(xué)者或者參賽的選手一點(diǎn)幫助,當(dāng)然,也算是一種拋磚引玉,大家有什么好的技巧經(jīng)驗(yàn)什么的,也能多,借助這次比賽,我們共同進(jìn)步。

如果大家都是跟我一樣,剛剛開始接觸QT,開始開發(fā)QT的程序,肯定也會有很多不習(xí)慣的地方,今天我重點(diǎn)想談的就是這么一個不習(xí)慣的地方——QT窗口刷新事件。

對于窗體刷新事件,我主要談一下paintevent的使用,我猜也許很多人初次使用這個的時候,也跟我一樣一頭霧水,搞不懂這個是在什么時候被調(diào)用的,現(xiàn)在我來簡單說明一下。

void QWidget::paintEvent ( QPaintEvent * )

如果不了解它的原理,任意找個例子程序你也是很難找到什么時候它被調(diào)用的痕跡的。

Paint這個事件只要是窗體部件需要被重繪了就會被調(diào)用,是由窗體系統(tǒng)產(chǎn)生的,但要求程序重畫窗體部件的時候,事件循環(huán)就會從事件隊(duì)列里面選中這個事件并把它分發(fā)到那個需要重畫的widget中。并不是所有的paint事件都是由窗口系統(tǒng)產(chǎn)生的,通過repaint()或update()你也可以使用它。但是,需要知道的是,就算你很不耐煩,想直接調(diào)用paintEvent(),這是不可能的,因?yàn)閜aintEvent()函數(shù)是protected的(很可能訪問不了)。它也繞開了任何存在的事件過濾器。因?yàn)檫@些原因,Qt提供了一個機(jī)制,直接sending事件而不是posting 。

不過,需要注意的是,有時候update()執(zhí)行后不一定會直接轉(zhuǎn)到paintEvent。為什么會這樣?這是因?yàn)?strong>QT會把多個繪制事件自動的合并成一個來加快繪制速度。這一點(diǎn),是不是也很不習(xí)慣呢,不過,我認(rèn)為也是很有優(yōu)勢的一點(diǎn),在實(shí)現(xiàn)我們的程序的時候,我們可以把所有的繪制窗體的那些語句函數(shù)什么的都放到paintEvent,通過各種如 if-else語句進(jìn)行判斷來繪制,這樣對速度有很好的優(yōu)化并且可以防止閃爍。

繪制事件還有一點(diǎn)也很需要注意,那就是:當(dāng)繪制事件發(fā)生的時候,更新區(qū)域通常被擦除。如果需要在上次繪制的基礎(chǔ)上進(jìn)行繪制的話,我的做法是:用一個臨時變量存著上次繪制后的圖,然后在這個圖上進(jìn)行繪制,***再直接顯示這個圖就行了。是個很笨的方法,如果大家有其他的更好的方法可以接受下。順便提一下,通過QPaintEvent::erased()可以得知這個窗口部件是否被擦除。

Ps:寫完查了一下,在WRepaintNoErase窗口部件標(biāo)記被設(shè)置的時候不會擦除。

void QWidget::update ()

這個事件上文中就提到了,用于更新窗體部件,它規(guī)劃了所要處理的繪制事件??梢员?strong>QT優(yōu)化,把多個繪制事件合并。所以推薦大家使用這個,而不是repaint()。幾次調(diào)用update()的結(jié)果通常僅僅是一次paintEvent()調(diào)用,這個優(yōu)化對性能還是很有好處的。

小結(jié):關(guān)于QT窗口刷新事件,今天就介紹這么多,都是些基礎(chǔ)的東西。大牛們就不用看了,呵呵,希望和我一樣的初學(xué)者們,也都能介紹下自己開發(fā)中遇到的問題,大家一起分享討論進(jìn)步。***希望本篇文章對你有所幫助。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-09-08 10:38:37

Widget

2011-06-17 14:29:55

Qt

2011-06-17 14:12:32

Qt

2011-06-17 15:06:14

Qt

2011-06-17 15:32:28

Qt

2011-06-17 15:19:28

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:44:25

Qt

2011-06-17 15:37:42

Qt

2011-06-17 14:54:31

Qt

2011-06-17 14:41:56

Qt

2011-06-27 14:56:46

Qt Designer

2011-08-04 18:01:07

IOS Cocoa Touc

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

2011-08-24 09:54:05

Lua字符春交互

2011-08-10 16:44:56

iPhone代理設(shè)計模式

2011-08-25 15:51:10

Lua腳本

2011-08-24 17:19:20

Lua源文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號