一、分層繪制

    一直說(shuō)要講2.0.0版本,但總是想把1.3.2版本拿出來(lái)比較一下,這篇文章也不例外。QCustomPlot2.0.0beta版本比1.3.2release版本有一個(gè)很大的改進(jìn)那就是分層繪制,所謂分層繪制就是把一張圖分幾張圖來(lái)繪制,最后在把這分開(kāi)的幾張圖統(tǒng)一繪制到一張圖上,比如一張圖A,需要分開(kāi)成3張圖B、C和D來(lái)繪制,當(dāng)圖A需要重新繪制時(shí),我們一次判斷B、C和D是否需要重新繪制,如果不需要繪制的我們直接把圖貼到A上,那就很大的減少了重新繪制的時(shí)間,而這部分時(shí)間其實(shí)是沒(méi)有必要花費(fèi)的。

回到頂部

二、QCustomPlot的層

    QCustomPlot默認(rèn)提供了6個(gè)層,如下代碼所示,分別是:背景層、網(wǎng)格層、主層、坐標(biāo)軸層、圖例層和矩形選擇區(qū)域?qū)印?/p>

1 mLayers.append(new QCPLayer(this, QLatin1String("background")));2 mLayers.append(new QCPLayer(this, QLatin1String("grid")));3 mLayers.append(new QCPLayer(this, QLatin1String("main")));4 mLayers.append(new QCPLayer(this, QLatin1String("axes")));5 mLayers.append(new QCPLayer(this, QLatin1String("legend")));6 mLayers.append(new QCPLayer(this, QLatin1String("overlay")));
  • 背景層:繪制背景圖

  • 網(wǎng)格層:繪制網(wǎng)格線,每一個(gè)坐標(biāo)軸對(duì)應(yīng)一個(gè)網(wǎng)格對(duì)象

  • 主層:繪制圖表

  • 坐標(biāo)軸層:繪制坐標(biāo)軸

  • 圖例層:繪制圖例

  • overlay層:繪制最上層的東西,這一層在1.3.2版本時(shí)沒(méi)有。鼠標(biāo)選擇矩形框在此層繪制??梢詤⒖?a class="postTitle2" style="color: rgb(70, 70, 70); text-decoration: none;">QCustomplot使用分享(五) 布局文章中圖1

    實(shí)現(xiàn)分層繪制的關(guān)鍵類QCPAbstractPaintBuffer,這是一個(gè)抽象基類,通過(guò)該類可以拿到一個(gè)QCPPainter指針,然后繪制東西的時(shí)候,都會(huì)繪制在這個(gè)指針?biāo)傅睦L圖設(shè)備上。QCPAbstractPaintBuffer類一共有3個(gè)子類,分別是QCPPaintBufferPixmap、QCPPaintBufferGlPbuffer和QCPPaintBufferGlFbo,這3個(gè)類分別使用了不同繪圖技術(shù)來(lái)實(shí)現(xiàn)分層繪制。默認(rèn)使用的是QCPPaintBufferPixmap來(lái)繪制,如果想使用QCPPaintBufferGlPbuffer或者QCPPaintBufferGlFbo來(lái)繪制,首先要使用setOpenGl接口打開(kāi)使用opengl開(kāi)關(guān),然后定義QCP_OPENGL_FBO宏來(lái)默認(rèn)使用QCPPaintBufferGlFbo繪制,或者定義QCP_OPENGL_PBUFFER宏來(lái)讓默認(rèn)使用QCPPaintBufferGlPbuffer方式繪制

網(wǎng)友評(píng)論