QT中雙緩衝加速繪製

2021-08-27 08:35:33 字數 977 閱讀 6258

qt中的繪製都是在函式paintevent(qpaintevent *event)中繪製的,而且必須在這個函式下面繪製。

繪製簡單的圖形的時候效率還是不錯的,但是一旦繪製的內容比較多的時候,繪製的時候就是有些卡頓了。

有的同學就是說,可以使用執行緒的方式,多開乙個執行緒就可以了,但是大家不要忘了,任何繪製的過程都是在paintevent(qpaintevent *event)

這個函式中實現的,即使開啟另外乙個執行緒,處理資料是可以的,但是繪製的時候還是在這個函式中,相當於永遠都是單執行緒的繪製。

那麼有沒有辦法加快繪製的過程呢?答案是有的,就是採用雙緩衝的技術。

何謂「雙緩衝」?顧名思義,就是緩衝兩次,第一次是用來繪製圖形,一次是用來顯示圖形,區別於之前的邊繪製邊顯示的模式。

首先在記憶體中把需要繪製好的東西繪製到記憶體buffer中,然後在把繪製的記憶體一次性的顯示出來;如果這樣覺得還不夠快的話,可以單獨開起乙個繪製的執行緒。

drawpixmap是利用gpu繪製的,可以節約cpu的資源

**:

定義乙個繪製的:

qpixmap* trackpixmap = nullptr;//航跡繪製

qrect rect;//pixmap的矩形範圍

playdatathread* datathread2 = nullptr;//航跡繪製執行緒

初始化當前這個:

trackpixmap =

new qpixmap(size);

trackpixmap->fill(qt::transparent);//設定背景透明

rect = trackpixmap->rect();

void run()

}}

painter->drawpixmap(0, 0, *trackpixmap);

GDI 中的雙緩衝

1 使用.net框架的預設雙緩衝 1 在應用程式中使用雙緩衝的最簡便的方法是使用 net framework 為窗體和控制項提供的預設雙緩衝。通過將 doublebuffered 屬性設定為 true。this.doublebuffered true 2 使用 setstyle 方法可以為 wind...

mfc中的雙緩衝機制

簡單來說其基本的概念 專門設定乙個暫時儲存圖形資訊的記憶體,將所有暫時的畫圖內容先放到暫存cdc中,然後再放入完所有的以後呼叫.具體實現步驟 1.首先是定義乙個暫時的裝置上下文 cdc h bufdc 雙緩衝層 cbitmap membitmap 定義乙個位圖物件 2.然後對其進行初始化 cdc p...

GDI 中雙緩衝的基本寫法

在vc中經常需要對介面進行重繪,其中為了保持介面不閃爍,就需要用到雙緩衝處理方法。詳細的過程如下所示 cdcdcmemory dcmemory createcompatibledc dc cbitmap bmp bmp.createcompatiblebitmap dc 1024,768 dcmem...