将 C 中的 gtk3 与 C++ 中的 gtkmm 结合起来

Posted

技术标签:

【中文标题】将 C 中的 gtk3 与 C++ 中的 gtkmm 结合起来【英文标题】:Combine gtk3 in C with gtkmm in C++ 【发布时间】:2020-09-06 22:55:53 【问题描述】:

我正在考虑将现有项目从用 gtk3 编写的 C 慢慢转换为 C++。最初,我开始构建类并使用extern "C" 一次移动一个函数。然而,gtk 拥有它的整个 GObject 系统,并带有特殊的东西来实例化和处理。 (有大量即时创建的魔法宏。)

我开始用 C++ 为 Gtk 制作一个包装器,但我突然想到 gtkmm 已经存在。 gtk代码可以和gtkmm结合吗?信号和插槽是否可以在两者之间工作,它是否可以很好地与 c++ gtkmm 对象和 c gtk“对象”一起使用?

最坏的情况是我可以镜像对象并将它们来回投射......并使用 gtk 在 C 中处理创建和删除,因此它不会破坏任何东西,但最终我想将它们完全从 C 中拉出并且我认为最后一点会很痛苦。

【问题讨论】:

【参考方案1】:

所有 Gtkmm 小部件都有一个名为 gobj() 的方法,为您提供小部件的 C 指针,以便您可以在其上调用 C 函数。 https://developer.gnome.org/gtkmm-tutorial/stable/sec-basics-gobj-and-wrap.html.en https://developer.gnome.org/gtkmm/stable/classGtk_1_1Widget.html

我猜 gtk C 回调与 gtkmm 回调兼容: https://developer.gnome.org/gtkmm-tutorial/stable/sec-connecting-signal-handlers.html.en

【讨论】:

以上是关于将 C 中的 gtk3 与 C++ 中的 gtkmm 结合起来的主要内容,如果未能解决你的问题,请参考以下文章

将 C++ 中的“extern C”与 ctypes 的向量一起使用

CSS文件中的Gtk3键绑定

如何使用 Cairo 和 Gtk3 在 GtkDrawingArea 中绘制一条线

Ubuntu 下 GTK3 安装与编译

嵌入式 Linux 中的 C 与 C++

如何将 GTK2 像素图移植到 GTK3_