在QT嵌入式Linux版本中,painting是一個純軟體實作,分兩步:首先,每個視窗使用QPaintEngine在QWSWindowSurface畫圖,然後,伺服器程式将記憶體中内容寫入顯示器中。嵌入式Linux版本QT使用QRasterPaintEngine來實作painting操作,利用QScreen來實作window composition
為了實作加速,嵌入式版本進行如下操作:
1、建立定制顯示屏
2、實作定制Raster Paint Engine
3、讓Paint Device檢測到Paint Engine
4、讓Window Surface檢測到你的Paint Device
5、建立自己的Window Surface
步驟1:
從QScreen類繼承建立定制的screen
重新實作connect() disconnect initDevice() shutdownDevice()函數,這些函數的作用為配置硬體或者獲得硬體配置。connect()和disconnect()函數在server和client程式中都調用,而initDevice()和shutdownDevice()函數隻在server中調用
一般還需要重新實作blit()函數和solidFill()函數
步驟2:
繼承QRasterPaintEngine類實作畫圖操作
重新實作自己需要的,不需要的不實作
步驟3:
繼承QCustomRasterPaintDevice類重新實作paintEngine()函數,此函數傳回paint engine的指針。另外重新實作QCustomRasterPaintDevice::memory()函數,此函數傳回用于painting的緩存空間指針
沒有Memory Buffer的加速
一般QRasterPaintEngine在memory buffer中畫圖,不過在一些情況下,可能希望不直接使用memory buffer(例如使用顯示卡)。重新實作QCustomRasterPaintDevice::memory()函數傳回0(實際上告知調用者沒有buffer),然後,屋裡顔色或圖檔都在paint engine buffer中寫。paint engine就會調用QRasterPaintEngine::drawColorSpans()和QRasterPaintEngine::drawBufferSapn()
注意,一般需要調用qFatal()顯示錯誤資訊
步驟4:
繼承QWSWindowSurface類,重新實作paintDevice()函數
步驟5:
重新實作QScreen的createSurface()函數,此函數建立自己的QWSWindowSurface子類的執行個體。