是否可以将 GTK+ 与 C++ 一起使用?

Posted

技术标签:

【中文标题】是否可以将 GTK+ 与 C++ 一起使用?【英文标题】:Is it possible to use GTK+ with C++? 【发布时间】:2011-04-11 03:00:33 【问题描述】:

我正在选择一个用于 C++ 学习的 GUI 工具包。我在网上做了一些搜索,大多数人建议 GTKmm 用于 C++ 而不是 GTK+。尽管如此,我还是看到了一些使用 GTK+ 制作的 C++ 应用程序。

所以,我只想知道具体的原因: 1. 为什么 GTKmm 是 C++ 的首选? 2. 如果我使用 GTK+ for C++ 应用程序而不是 GTKmm,我将面临哪些限制

【问题讨论】:

its homepage 有一些很好的理由。 感谢您的快速回复!但是 GTK+ 能做到这些吗? 如果您要学习 GUI 工具包,我更愿意推荐 Qt。除非 GTK 有一些你需要的功能。 嗯,我选择 GTK+(或 Gtkmm)而不是 Qt 的唯一原因是因为据我所知,大多数用 Qt 编写的应用程序看起来都很混乱。我知道 GTK 在 Windows 中看起来很陌生,在 Mac 中看起来很陈旧,但我觉得使用 GTK 的应用程序在小部件排列方面比使用 Qt 的应用程序更清晰。我见过的最清晰的 Qt 应用程序是 VLC 媒体播放器和 QStardict。它们看起来比大多数其他 Qt 应用程序更好。 但是,由于我只在 Windows 和 Linux 上开发软件,我认为 Gtkmm 对我来说是一个不错的选择。如果我打算在 Mac 中进行任何编程,我将学习使用专为 Mac 设计的 GUI。 Qt虽然可以在OSX中使用,但有时候看起来还是很“洋气” 【参考方案1】: gtkmm 允许您使用常规 C++ 技术(例如封装、派生和多态性)编写代码。作为一名 C++ 程序员,您可能已经意识到这会导致代码更清晰、更有条理。 gtkmm 类型更安全,因此编译器可以检测到只有在使用 C 时才能在运行时检测到的错误。这种对特定类型的使用也使 API 更清晰,因为您可以通过查看来了解应该使用哪些类型在方法的声明中。 继承可用于派生新的小部件。在 GTK+ C 代码中派生新的小部件非常复杂且容易出错,几乎没有 C 编码人员这样做。作为 C++ 开发人员,您知道派生是一种必不可少的面向对象技术。 可以使用成员实例,简化内存管理。所有 GTK+ C 小部件都使用指针来处理。作为 C++ 编码人员,您知道应尽可能避免使用指针。 代码更少。 GTK+ C 对象模型使用前缀函数名和转换宏。例如:gtk_button_set_text(GTK_BUTTON(button), "sometext");gtkmm C++ 代码更短更清晰。例如:button.set_text("sometext"); 无需担心 GTK+ 的引用计数策略不一致。

来源:http://live.gnome.org/gtkmm/FAQ

【讨论】:

谢谢!我想我找到了答案! “无需担心 GTK+ 不一致的引用计数策略”是什么意思。 ? @liberforce 抱歉,我对图书馆不够熟悉,不知道这一点,我刚刚从提到的链接中获得了该信息。我想这意味着他们自己做引用计数,这比 GTK+ 的默认行为更好(更少的内存泄漏?)。但我不是最适合提问的人,我只是给了提问者他想要的答案。 哦,我没有注意到它是 GNOME wiki 的副本/粘贴。事实上,编辑它的人是 GTKmm 开发主管 Murray Cumming,所以我想他知道他的东西,但这是我第一次看到有人抱怨。

以上是关于是否可以将 GTK+ 与 C++ 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

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

是否可以在 C++ 中将返回值移动语义与受保护的复制构造函数一起使用?

检查 OpenCV 是不是使用来自 C++ 代码的 GTK 支持进行编译

是否有可能直接将 C++ 与 Metal API 一起使用

是否可以将 Qt Creator 2.7 与 Visual Studio 2012 编译器一起使用并具有其所有功能?

C++ 17 可以使用 clang 与 CUDA 一起使用吗?