欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

什么是QtQGraphics體系及刷新機(jī)制

這篇文章主要講解了“什么是Qt QGraphics體系及刷新機(jī)制”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“什么是Qt QGraphics體系及刷新機(jī)制”吧!

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出金口河免費(fèi)做網(wǎng)站回饋大家。

概述

Qt的三大體系:QWidget、QGraphics、Quick,其中QGraphics圖形框架算是這三個(gè)中比較高級(jí)的一種用法了,并且使用起來相比另外兩個(gè)體系會(huì)更加的復(fù)雜一些,不過它能實(shí)現(xiàn)的功能卻非常強(qiáng)大,主要體現(xiàn)在對(duì)圖元的管理,它獨(dú)特的刷新機(jī)制可以在眾多的圖元中都能夠很好的管理,保證整個(gè)交互的流暢度。

而這里要描述的就是QGraphics體系的刷新機(jī)制以及該體系中相關(guān)元素的使用方式及特點(diǎn)。

QGraphics體系的三大元素

QGraphics體系中最重要的三大元素:QGraphicsView、QGraphicsScene、QGraphicsItem,這三者構(gòu)成了QGraphics體系最基礎(chǔ)的模型框架,也是在使用過程中必不可少的元素。

  • QGraphicsScene :場(chǎng)景。場(chǎng)景用于裝載所有item元素,它是一個(gè)無限大的空間,但是我們?cè)谑褂玫臅r(shí)候通常會(huì)指定一塊區(qū)域(setSceneRect)用于安放所有的item元素,并且item之間的邏輯,以及消息傳遞都是從場(chǎng)景中進(jìn)行統(tǒng)一管理,比如我門要捕捉鼠標(biāo)消息,或者觸控消息,統(tǒng)一在Scene中獲取,然后分發(fā)給需要的item,可以說Scene就是一個(gè)大管家;

  • QGraphicsView:視圖。視圖就好比一個(gè)窗口,用于展示當(dāng)前Scene中的元素,上面說到,Scene是一個(gè)無限大的空間,當(dāng)view移動(dòng)到Scene某個(gè)位置,就能看到該位置上的Item元素。

  • QGraphicsItem:每一個(gè)單獨(dú)的圖元,QGraphicsItem是一個(gè)基類,還有很多子類繼承于它,也就是這一系列的item行程了整個(gè)QGraphics體系中的每一個(gè)圖元。

看一下這三者的關(guān)系:

什么是Qt QGraphics體系及刷新機(jī)制

再用一個(gè)非常形象的類比應(yīng)該就會(huì)很明白這三者的關(guān)系了:
Scene就好比天空,無限大,而Item就是天空中的云朵,可以有很多云,而view就好比一扇窗戶,透過窗戶可以看到天空中的云,而一片天空可以通過很多扇窗戶去看。所以一個(gè)Scene可以同時(shí)對(duì)應(yīng)多個(gè)View,但是一個(gè)View只能對(duì)應(yīng)一個(gè)Scene。

刷新機(jī)制

OK ,有了以上鋪墊,終于可以進(jìn)入都今天的主題,QGraphics體系中的刷新機(jī)制到底是怎樣的呢?

我們都知道,QWidget是以窗口式刷新,每次會(huì)渲染整個(gè)窗口達(dá)到刷新目的,而QGraphics中可以局部刷新,也就是說可以只刷新某一個(gè)圖元,而其他的元素保持不動(dòng),這是二者在刷新機(jī)制上很大的不同,以致于QGraphics在渲染大量圖元的時(shí)候也能很流暢。

看以下圖示:

什么是Qt QGraphics體系及刷新機(jī)制

這里的itemA在刷新的時(shí)候,ItemB是不會(huì)刷新的,這是兩個(gè)獨(dú)立的Item,但是考慮以下這種情況:

什么是Qt QGraphics體系及刷新機(jī)制

當(dāng)兩個(gè)item有交集的時(shí)候,這時(shí)候如果刷新ItemA,那么ItemB也會(huì)相應(yīng)的刷新,同樣,刷新ItemB的時(shí)候,ItemA也會(huì)觸發(fā)刷新。

并且要注意的是,上面說到的ItemA和ItemB的交集,并不局限于這兩者只是在同一平面上真實(shí)的交集,也就是說,即便是二者的ZValue不同, 但是從Z軸俯視的角度看到二者有交集也會(huì)觸發(fā)對(duì)方相應(yīng)的刷新。還有一種情況,如果兩個(gè)Item是父子關(guān)系,也會(huì)全部刷新。

所以上面圖示,即便ItemA和ItemB的ZValue不同,還是會(huì)觸發(fā)刷新。這是QGraphicsItem默認(rèn)的行為。

那么,這樣會(huì)帶來什么問題呢,如果我們做的是一個(gè)實(shí)時(shí)性非常高的動(dòng)作,比如在屏幕上畫線,線條要實(shí)時(shí)刷新,而這時(shí)候如果同時(shí)觸發(fā)了其他Item的刷新,并且該Item刷新比較耗時(shí),那么就會(huì)直接影響我們畫線item的刷新,直觀的感覺就是卡頓,線條折線嚴(yán)重,因?yàn)樗⑿陆缑娑际窃谥骶€程中執(zhí)行的,耗時(shí)操作將會(huì)阻塞。

避免重復(fù)刷新

那么該怎么解決這個(gè)問題呢?還真有辦法。

我們的目的就是即便是多個(gè)Item重疊,那在刷新其中一個(gè)的時(shí)候不要讓其他Item也跟著刷新,OK,QGraphicsItem中提供了一個(gè)枚舉:

enum QGraphicsItem::CacheMode

設(shè)置Item的緩存模式,我們來看一下緩存的類型:

什么是Qt QGraphics體系及刷新機(jī)制

默認(rèn)就是不做緩存,然后每次都會(huì)重新繪制。

QGraphicsItem::ItemCoordinateCache模式, QGraphicsItem會(huì)創(chuàng)建一個(gè)具有可配置大小/分辨率的屏幕外像素緩沖區(qū),但是渲染質(zhì)量通常會(huì)降低,具體取決于緩存的分辨率和項(xiàng)目轉(zhuǎn)換。 第一次重繪項(xiàng)時(shí),它會(huì)將自身渲染到緩存中,然后緩存將在每次后續(xù)曝光中重復(fù)使用。

QGraphicsItem::DeviceCoordinateCache模式,此模式適用于可以移動(dòng)但不旋轉(zhuǎn),縮放或剪切的項(xiàng)目。 如果直接或間接轉(zhuǎn)換項(xiàng)目,將自動(dòng)重新生成緩存。 與ItemCoordinateCacheMode不同,DeviceCoordinateCache始終以最高質(zhì)量呈現(xiàn)。

可以根據(jù)實(shí)際需要選擇使用哪種緩存模式,然后通過調(diào)用函數(shù)setCacheMode來設(shè)置。

函數(shù)原型為:

void QGraphicsItem::setCacheMode(CacheMode mode, const QSize &logicalCacheSize = QSize())

可選的logicalCacheSize參數(shù)僅由ItemCoordinateCache模式使用,并描述緩存緩沖區(qū)的分辨率,如果logicalCacheSize是(100,100),QGraphicsItem將使項(xiàng)目適合圖形內(nèi)存中的100x100像素,而不管項(xiàng)目本身的邏輯大小。

默認(rèn)情況下,QGraphicsItem使用boundingRect()的大小。對(duì)于除ItemCoordinateCache之外的所有其他緩存模式,將忽略logicalCacheSize。
如果項(xiàng)目花費(fèi)大量時(shí)間重繪自身,則緩存可以加快渲染速度。在某些情況下,緩存也會(huì)降低渲染速度,特別是當(dāng)項(xiàng)目花費(fèi)的時(shí)間少于重繪時(shí)間時(shí),QGraphicsItem會(huì)從緩存中重新繪制。

啟用緩存后,項(xiàng)目的paint()函數(shù)通常會(huì)繪制到屏幕外的pixmap緩存中,對(duì)于任何后續(xù)重繪請(qǐng)求,Graphics View框架將從緩存中重繪。這種方法特別適用于QGLWidget,它將所有緩存存儲(chǔ)為OpenGL紋理。

注意:?jiǎn)⒂镁彺娌⒉灰馕吨挥性陧憫?yīng)顯式update()調(diào)用時(shí)才會(huì)調(diào)用item的paint()函數(shù)。例如,在內(nèi)存壓力下,Qt可能決定丟棄一些緩存信息;在這種情況下,即使沒有update()調(diào)用(也就是說,沒有啟用緩存),也會(huì)調(diào)用item的paint()函數(shù)。

那么,既然會(huì)繪制到pixmap緩存中,如果數(shù)據(jù)量特別多,導(dǎo)致pixmap緩存不夠怎么辦,這時(shí)候就需要通過更改QPixmapCache的緩存限制以獲得最佳性能。

QPixmapCache

QPixmapCache類為pixmaps提供應(yīng)用程序范圍的緩存。
此類是使用QPixmap優(yōu)化繪圖的工具。

QPixmapCache不包含任何成員數(shù)據(jù),只包含訪問全局像素圖緩存的靜態(tài)函數(shù)。它創(chuàng)建了一個(gè)內(nèi)部QCache對(duì)象來緩存pixmaps。

默認(rèn)的pixmap緩存空間為10MB,如果我們需要緩存的數(shù)據(jù)量很大,那么就需要修改這個(gè)值,通過調(diào)用靜態(tài)函數(shù)setCacheLimit來進(jìn)行設(shè)置即可。

感謝各位的閱讀,以上就是“什么是Qt QGraphics體系及刷新機(jī)制”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)什么是Qt QGraphics體系及刷新機(jī)制這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站名稱:什么是QtQGraphics體系及刷新機(jī)制
網(wǎng)址分享:http://aaarwkj.com/article24/goosje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、建站公司電子商務(wù)、定制網(wǎng)站、關(guān)鍵詞優(yōu)化、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
欧美日韩一区二区黄色| 亚洲综合一区国产精品| 夫妻性生活视频全过程| 国产裸体无遮挡免费精品| 少妇的诱惑免费在线播放| 福利一区福利二区视频| 日本高清加勒比免费在线| 亚洲一区二区婷婷久久| av在线播放网址网站| 熟妞人妻精品一区二区视频| 日本h电影一区二区三区| 日本女人体内射精视频| 国产一区二区三区的网站| 色欧美在线视频观看日韩| 亚洲五月综合激情综合久久| 在线观看高清免费国产| 国产精品久久久久精品日日三级| 视频一区欧美日韩精品| 日韩高清av不卡一区二区三区| 亚洲精品成av人在线观看| 人体蜜桃视频一区二区| 最新免费观看男女啪啪视频| 日韩成人在线视频观看| 国产精品日韩理论在线| 亚洲丰满毛茸茸毛茸茸| 蜜臀av午夜福利在线| 在线视频天堂亚洲天堂| 国产午夜福利一区在线| 成人午夜三级在线观看| 欧美性做爰片免费视频网| 蜜臀av中文字幕亚洲| 一区二区三区av夏目彩春| 国产精品麻豆色哟哟av| 九九视频免费在线播放| 国产男女免费视频观看| 蜜臀av人妻一区二区三区| 久久人妻精品一区二区三区| 国语对白刺激真实精品| 中文字幕人妻丝袜乱一区二区| 蜜桃av噜噜一区二区三| 99热这里只有精品三区|