2012-02-07 86 views
0

我有一個自定義的GTK +小部件,我正在編譯C++文件(而不是C)。大部分代碼都是C++的C子集。該應用程序似乎運行良好。 (現在它只是顯示一個帶有小部件的頂級窗口。)但是,我在小部件結構中包含了一個析構函數,並注意到析構函數從未被調用過。編譯自定義GTK + Widget爲C++

  • 我應該怎麼做(爲了確保析構函數被調用?)(缺少使用gtkmm)?
  • 在C++中實現GTK +小部件時,我應該注意的其他後果是什麼?

回答

1

GTK使用面向對象的C,其中面向對象的部分使用函數指針進行可視化。所以,如果你可以緩存你這個指針與GTK控件的C面的代碼,然後here is more info ...

如果你的時間不多了,再取this example評論...在這個例子中尋找gtk_cpu_destroy ,下面的代碼在小部件中設置函數指針。

object_class->destroy = gtk_cpu_destroy; 

gtkmm的旁邊,還存在gfc project,我認爲這是更清潔和更容易理解......

什麼其他後果我應該知道實施GTK時的+在C++中的小部件?

我的查詢是,如果您的自定義窗口小部件是真的GTK控件或GDK部件...不是GDK的所有事件的gtkmm被處理(或者至少他們不早在2009年),因此要小心你的應用程序可能會崩潰太頻繁,如果您的小部件廣泛使用gdk,並且gdk事件未被捕獲。像systemtap這樣的工具可能會幫助你捕捉導致問題的事件。

+0

這是一個使用開羅繪製的GTK +小部件。我正在編譯爲C++而不是C。 – 2012-02-07 06:20:23

+2

Gfc不適用於任何人,最新版本是2004. – ergosys 2012-02-07 07:45:48

+0

yep gfc不再是一個選項,而是尋找內部代碼以理解OOC與C++集成的好選擇... #策劃 隨着卡里奧,你不會面對這些崩潰,我上次也轉移到開羅當我做自定義小部件.. – 2012-02-07 10:26:37