11

我是一名 C# 程序员,大约 2 年前开始使用 ubuntu。我想学习 C 或 C++ 中的 GUI 编程。我真的不喜欢单声道,它往往会在我的系统上崩溃。我对 C++ 有基本的了解。我从未在 C 中工作过,但它看起来很酷。我应该学习/使用哪个工具包?给出每个的优点/缺点。谢谢!

4

7 回答 7

37

我可能会被指责有偏见,因为我确实帮助了 gtkmm,但我首先是用户,所以......无论如何,如果你对 C++ 感到满意,我强烈推荐 gtkmm。使用 gtkmm 比使用 GTK+ 更容易管理内存,因为引用计数的对象是使用智能指针自动管理的。您还可以将对象实例化为自动变量(例如在堆栈上),并让它们的生命周期由它们的作用域决定。所以在实践中,使用 gtkmm 比使用 GTK+ 更容易避免内存泄漏。

gtkmm 相对于 GTK+(在我看来)的另一个巨大优势是使用了类型安全的信号框架。在 GTK+ 中,您经常需要将事物作为 void 指针传递,然后将它们转换为您认为它们应该是的类型。在 gtkmm 中,您不需要这样做,并且可以利用编译器在信号处理程序上强制执行类型安全。

与 C/GTK+ 相比的另一大优势是易于派生新类。在 GTK+ 中,您需要编写大量样板代码,并且基本上重新实现您在 C++ 中免费获得的东西,作为语言的一部分(例如继承、构造函数、析构函数等)。这更繁琐且容易出错。

grayfade 提到 gtkmm 是不完整的,他在一定程度上是对的—— gtkmm 并没有完全涵盖 GTK+ API 中的所有内容(尽管它非常接近)。但实际上这不是问题,因为您总是可以直接从您的 gtkmm 代码中使用 C/GTK+ API。与 C# 或 python 绑定相比,这种 C 兼容性是 C++ 的一个巨大优势,如果绑定不涵盖 API 的一部分,您将别无选择。

选择 GTK+ 而不是 gtkmm (IMO) 的唯一真正原因是 gtkmm 有一点额外的开销,因为它是 C 库顶部的包装器(但这通常只是一个函数调用,影响可以忽略不计) ,或者如果你讨厌或不能使用 C++。

于 2009-03-16T02:20:33.183 回答
19

如果您是 C# 程序员,为什么不看看Vala呢?

我的大多数 Linux GUI 应用程序都使用 pygtk,但是对于我现在正在处理的项目来说,Python 实在是太慢了,所以我试图选择 GTK+ 和 GTKmm 中的一个。然后我遇到了瓦拉。

这是一种相当新的语言,因此目前的文档非常有限,但我认为它具有两全其美的优点:C# 语法和 C 速度。

于 2009-03-16T02:34:29.640 回答
13

由于您更熟悉 C++,您可能会发现 GTKmm 更合适,因为您可以使用 RAII 之类的惯用语。不幸的是,GTKmm 有点不完整,并且缺少一些 GTK 较少使用的部分。

然而,GTK+ 本身本质上公开了一个类似于 C++ 中的对象模型,但只有 C 函数。C++ 中的构造和销毁之类的事情在 C API 中显式完成,小部件的实例仅通过指针处理。

尝试两者,看看哪个更适合您的项目。

于 2009-03-15T18:59:03.573 回答
6

正如许多人所说,Gtkmm 确实为您提供了良好的内存管理、引用计数对象等。不过,它确实属于一个部门。文档。整个 Gtkmm 项目都受到“无文档”现象的影响,其中发布(并在 3rd 方网站上重新发布)文档只是对头文件的 javadoc 扫描。

只是想让你知道你会进入什么。例如,Scrolled Window是 Gtkmm 中记录较好的类之一。

于 2011-11-02T17:32:27.377 回答
5

我建议用 gedit学习vala 。

http://www.valaide.org/doku.php:瓦拉

https://launchpad.net/valable:日食

http://code.google.com/p/vtg/:Gedit _

http://abderrahim.arablug.org/blog/:anjuta _

于 2009-04-05T04:48:35.187 回答
3

你看过Qt吗?
这是不错的 C++ 设计、跨平台和 LGPL

于 2009-03-15T19:07:36.983 回答
3

我认为最好的方法是先学习 gtkmm!在您完成 gtkmm 的基础知识之后,GTK+ 应该很容易学习(前提是您了解 C 并且熟悉指针)。

如果您不了解 C,您可以通过阅读 Dennis Ritchie 的 The C Programming Language 快速学习它

我建议你先学习gtkmm,因为它是专门为C++设计的,它与C#有点相似,都是面向对象的,所以gtkmm会比GTK+更容易学习。

在 gtkmm 之后,您可以继续使用 GTK+

大部分开源公司使用 GTK+ 而不是 gtkmm,所以 GTK+ 值得学习!

于 2010-12-12T16:54:54.857 回答