QT顯示機制 一

2021-06-20 02:07:45 字數 1588 閱讀 3718

qt顯示機制(一)

blackdream2

qt顯示機制

-------albertchen

了解qt顯示機制,最重要的就是要了解qt是如何管理窗體的顯示區域的,這裡有個重要的類:qregion, 在qt中可以通過qregion定義乙個窗體的顯示區域,也可以通過qregion定義窗體的可修改區域,比如在qpainter()中通過qpainter::setcliprect設定乙個區域,我們繪圖則只能在這個區域,此區域外繪圖都是無效的。通過qregion可以作一系列的邏輯運算,如兩個區域相加,相減等。qregion定義的區域不一定是連續的,但一定是由封閉的區域組成的,我們常會碰到乙個窗體的顯示區域被其他窗體分割為幾塊的情況。qt對這些顯示區域的管理,類似於對窗體的管理,也是通過伺服器與客戶端的方式。參照以前的說法server表示為全域性的global ,客戶端為本地得local。那麼windowsserver管理乙個全域性的顯示區域即所有的top-level widget顯示區域。而其他的child windget 的管理則在每乙個qt應用程式中由qwsregionmanager管理,top_level widget 顯示區域也會載入在其中,這個不難理解,因為server只是負責將窗體事件傳送到客戶端,具體處理還是由客戶端來操作。具體的流程還是來看**吧。

顯示區域管理者qwsregionmanager的初始化

伺服器:

通過呼叫opendisplay()。

客戶端: 

在qwsdisplaydata類的建構函式中通過呼叫qwsdisplaydata::init()完成。

考慮乙個比較簡單的情況,我們要顯示的widget 是乙個top_leverl widget。在呼叫show()函式中,這個widget將通過showwindows()向伺服器請求做三件事:(以下窗體是指在global windows statck 中的top_level widget)

1:呼叫qwsdisplay::requestregion向伺服器請求窗體顯示區域。

2:呼叫qwsddisplay::setaltitude向伺服器請求設定窗體的優先順序。此優先順序是指在windows statck中的位置,而不是指qwswidow 中的窗體優先順序屬性。

windows statck 

中的第乙個窗體就是顯示在lcd上最前面的窗體。

3:呼叫qwsdisplay::requestfocus 向伺服器請求設定窗體為焦點窗體。焦點窗體能接收key, mouse 事件,但不是所有的焦點窗體都能接收key,mouse 事件,如果有窗體設定為grabkey 或則grabmouse 則key, mouse 事件將分別傳遞至此窗體。

下面將通過**分析winddows server對這三個請求的處理過程:

一: qwsdisplay::requestregion的處理

void qwsserver::invokeregion( qwsregioncommand *cmd, qwsclient *client )

invokeregion

呼叫setwindowregion

設定窗體顯示區域,呼叫

syncregions

通知客戶端 重新整理顯示區域,並產生一些窗體事件如:show, 

geometry

,hide。

QT顯示機制(五)

qt顯示機制 五 blackdream2 繪圖的底層操作 lcd螢幕上的每個點都與顯示緩衝區中的資料有特定的關係,對16位色的顯示緩衝區,每兩個位元組對應lcd上的乙個畫素,因此我們只要修改緩衝區某兩個位址上的資料就可以改變lcd上這個點的色彩,如果我們能夠得到這個顯示緩衝區的位址,應用程式編寫者就...

QT的顯示機制

1 qt圖形框架資料01 2 了解qt顯示機制,最重要的就是要了解qt是如何管理窗體的顯示區域的,這裡有個重要的類 qregion,在qt中可以通過qregion定義乙個窗體的顯示區域,也可以通過qregion定義窗體的可修改區域,比如在qpainter 中通過qpainter setcliprec...

Qt 事件機制(一)

每種事件對應乙個事件處理器,如滑鼠移動對應mousemoveevent 在發生事件時 比如說上面說的按下滑鼠 就會產生乙個qevent物件,這個qevent物件會傳給當前元件的event函式 qt系統在處理事件時,有一種機制叫事件傳播機制。也就是說,在子元件 比如說乙個qbutton 中發生的事件,...