2012-02-07 78 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