【问题标题】:Compiling Custom GTK+ Widget as C++将自定义 GTK+ 小部件编译为 C++
【发布时间】:2012-02-07 04:10:29
【问题描述】:

我有一个自定义 GTK+ 小部件,我在 C++ 文件(而不是 C)中编译它。大部分代码是 C++ 的 C 子集。该应用程序似乎运行良好。 (现在它只显示一个包含小部件的顶级窗口。)但是,我在小部件结构中包含了一个析构函数,并注意到该析构函数从未被调用。

  • 我应该怎么做(不使用 gtkmm)才能确保调用析构函数?
  • 在 C++ 中实现 GTK+ 小部件时,我应该注意哪些其他后果?

【问题讨论】:

    标签: c++ c gtk


    【解决方案1】:

    GTK 使用面向对象的 C,其中面向对象的部分使用函数指针进行可视化。因此,如果您可以使用 gtk 小部件的 C 端代码缓存您的 this 指针,那么 here is more info...

    如果你没时间了,那就去看看this example...在这个例子中寻找gtk_cpu_destroy,下面的代码设置了widget中的函数指针。

    object_class->destroy = gtk_cpu_destroy;
    

    除了gtkmm,还有gfc project,我觉得更干净,也更容易理解……

    在 C++ 中实现 GTK+ 小部件时我应该注意哪些其他后果?

    我的问题是您的自定义小部件是否真的是 gtk 小部件或 gdk 小部件...并非所有 gdk 事件都在 gtkmm 中处理(或者至少它们不是在 2009 年),因此请注意您的应用程序可能经常崩溃,如果您的小部件广泛使用 gdk,并且 gdk 事件没有被捕获。 systemtap 之类的工具可能会帮助您捕获导致问题的事件。

    【讨论】:

    • 这是一个使用 Cairo 进行绘图的 GTK+ 小部件。我正在编译为 C++ 而不是 C。
    • Gfc 不适合任何人,上一个版本是 2004 年。
    • 是的 gfc 不再是一个选项,但它是查看内部代码以了解 OOC 与 c++ 集成的好选择...#Agnel 使用 Cario,您将不会面临这些崩溃,我也转向cairo 上次我做自定义小部件时..
    • @PM,没有崩溃。只是一个没有被调用的析构函数。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多