對gtk構件顯示的總結

2021-08-30 07:39:08 字數 1534 閱讀 3137

1、gtk_widget_realize的作用是,為構件(widget)建立乙個gdk_window,也即是為widget建立乙個xid資源

2、只有當乙個widget已經被加入到頂級視窗後(top-level),才可以對 widget呼叫gtk_widget_realize操作,這是因為gdk_window的建立,是需要首先建立父視窗,再才建立子視窗的。因此,這是乙個從root_window依序往下,建立視窗的過程。如果程式中,還沒有對所有的widget連線好(確定父子關係),就擅自對其中某個widget 呼叫gtk_widget_realize操作,那麼會導致嚴重的後果,因為可能導致某個widget的父視窗為null,或自身的 widget->window為null。

3、對某個widget呼叫gtk_widget_realize操作,這不僅僅只是自身的widget被 realized。整個的過程是,從top_level的widget開始,依次realize每個級別上的widget。也即,所有的父widget都會被realized,因為gdk_window的建立,需要父視窗先被建立出來。

4、gtk_widget_realize一般是不被外部程式所呼叫(雖然gtk_widget_realize是乙個gtk外部介面函式),而只是被gtk內部的實現所使用。例如,它主要由gtk_widget_map所呼叫。

5、gtk_widget_map的作用就是顯示widget,也即呼叫xmapwindow操作。因此,gtk_widget_map內部首先會保證widget已經被realized過了。

6、gtk_widget_map一般也只是被gtk內部的實現所使用。它由特定的widget(例如,gtkwindow)的show訊號的預設實現所呼叫(例如,gtk_window_show),這個訊號由gtk_widget_show所觸發。

7、gtk_widget_show的作用,標示widget為可以show狀態,當top_level的widget接到show訊號後,在它的預設實現中,會呼叫gtk_widget_map來真正的顯示widget。

8、gtk_widget_show_all比較複雜,但是它的作用比較簡單,那就是從當前的widget開始,把所有gtkcontainer型別的widget(以及child widget)都呼叫gtk_widget_show。

對於編寫gtk應用程式時,顯示widget的操作過程如下:

1、從下往上,依次gtk_widget_show每個widget,當top_level的widget被gtk_widget_show時,它會觸發 gtk_widget_map每個widget,這同樣也是從下往上的次序。但是,請注意!gtk_widget_map內部,會隱式地從上往下的順序呼叫gtk_widget_realize

2、還有另外一種簡單的方法,那就是不依次從下往上gtk_widget_show每個widget,而只是對top_level呼叫gtk_widget_show_all操作。這個操作,其實質上相當於從下往上,依次gtk_widget_show每個 widget。但是它的實現確實比較複雜,在這裡,它通過c語言中的callback,完美無缺地實現了類似於c++中的虛函式。

gtk 中對字型大小及顏色的修改

字型大小用pango pangofontdescription font desc pango font description from string serif 15 或 pangofontdescription font desc pango font description from str...

使vim支援對gtk 的API函式自動補全

收藏於 2011 08 06 步驟一 切換到 root localhost gtk cd usr include gtk 2.0 gtk 步驟二 生成tags檔案 root localhost gtk ctags r 步驟三 將生成的tags檔案cp到你的程式所在目錄,然後執行下面命令 root l...

gtk2 0中文字型不能顯示的問題

使用g locale to utf8 g locale from utf8 函式,注意下面幾點 1 使用這兩個函式之前,一定要設定locale,可以通過locale命令檢視當前設定,通過locale a命令檢視所有可以的local 通過export lc all zh cn.utf8和export ...