跨平台C库用于GUI应用程序?

52

免费、易学易用、跨平台的C语言GUI应用程序库?我是不是在找Qt?

奖励问题:我能否在Mac上开发该库/工具包,然后在PC/Linux上重新编译?

超级奖励问题:链接到所述库的教程和/或下载。

事实上,我正在努力学习C系列语言(从Web开发 - XHTML/PHP/MySQL转型),以便学习iPhone开发。

我确实明白C不是C++或ObjectiveC,但我希望保持学习曲线尽可能简单。不要太离题,但我也在寻找好的入门书籍和网站。我已经找到了这个

我试图一石多鸟。我知道有特定于平台的扩展,但为了便于移植,我将尝试避免使用它们。我的想法是在一台机器上编写代码,然后只需编译三次即可(Mac/Win/Linux)。如果Objective C也可以在Windows和Linux上编译,就很好。如果必须使用C ++,那也没关系。


2
桌面GUI编程与iPhone开发有什么关系?如果你想从事手机开发,那么桌面GUI编程是你最不想开始的地方。 - jmucchiello
2
@jmucchiello - 我没有说桌面电脑,也没有提到iPhone。好吧,我提到了iPhone。这个问题已经有点过时了,但你是对的。我现在知道了。 - Moshe
是的,当我回答时我没有意识到这个问题已经很老了。 - jmucchiello
1
投票关闭,建议使用工具。 - Ciro Santilli OurBigBook.com
1
好的。社区在6年内已经发生了足够的变化。我同意。 - Moshe
8个回答

25
如果你正在寻找一个C++库,那么Qt基本上可以满足你的需求。如果你想坚持使用纯C,那么Qt不是一个选择。
作为一个C框架,你可以使用GTK+,它适用于Linux、Windows和OS X。

QT需要商业使用付费吗?虽然他没有说是商业用途,但他谈到了mac/win/lin和iPhone。 - phkahler
1
@phkahler:不,它不会,你可以将其用作LGPL(因此,只要使QT库本身的修改可用,就可以在商业闭源项目中使用它)。如果您想对QT本身进行修改,而不想在LGPL下公开,请使用商业许可证。 - sth
1
除非您想运行X11,否则Mac的GTK支持并不是很好,并且这也有其自身的缺点。 - mikerobi
1
在尝试将GTK+安装到Windows上的过去4个小时中,我不建议这样做。这真的是一个噩梦,即使你成功运行了它,仍然会出现问题,因为你需要在msys2中编译它... - AntonioCS
GTK+也可以与C++一起使用吗? - Aaron Franke
显示剩余7条评论

12

请查看 IUP 工具包。它主要使用 C 语言编写,并且也可以轻松地与 Lua 绑定。


5

4
另一种选择是 Tk,它是一个用 C 写的 GUI 库。它附带 Tcl,这也是一个用 C 写的脚本语言。它们从头开始设计为嵌入到 C 程序中。

4

我曾经考虑使用的一个选项是EFL,因为它非常快速、简单、小巧,但又功能强大。我建议先学习他们最简单的GUI工具包Elementary,等你熟悉了之后再转向EDJE,它不像Elementary那么简单,但更加强大。


它在Windows上真的能用吗?我试着安装了一下,但是太繁琐了,而且现在甚至不确定是否可能。 - Hrisip

3

Qt是一个C++库。其他跨平台库,您可能考虑的是wxWidgets(C++)和GTK(C)。

这三个库都是完全跨平台的。您也可以看看Tcl/Tk,但那是一个工具包 :)


gtkmm是C++编写的,因此你可以说GTK是C++。Qt也是如此,Python、Ruby、php等也是如此。在提供绑定时,向下绑定很困难,因此C++不方便地被视为C,因为C可以(粗略而又相当不公平地)被看作是C++的子集。 - e8johan

3
你在问题中标记了关于的标签,这是我关注的一个标签。但是,你也在问有关编程的问题。
如果由于某种奇怪的(或领域强制的)原因,你觉得必须使用C而不是C ++,那么Qt并不适合你。它是从头开始设计的C ++库。
然而,我强烈建议质疑为什么你的项目需要使用C。 C ++ 有许多好处,而C表现本质上更好的想法大多是个神话。如果想要一些确凿的数据,请查看Bjarne Stroustrup的Learning C++ as a New Language
如果你必须坚持使用C语言,那么总有GTK可供选择。GTK+的基础API是C语言,但也存在用于C ++的绑定,称为GTKmm。从设计角度来看,我不太喜欢它,但历史上曾为Gnome桌面(Ubuntu的默认桌面)提供支持……Google也选择了它作为Linux版Chrome的界面库,因此它具有一些信誉和支持。

但请注意,Ubuntu正在选择Qt5来实现他们下一个版本的桌面“Unity”:

https://askubuntu.com/questions/281092/why-is-canonical-choosing-qt-over-gtk-for-unitys-next-generation


编辑:您添加了:

如果我必须使用C++,那也可以。

“必须”是一个强烈的词,但实际上C++ / Qt与C / GTK之间几乎没有可比性。而后者正在成为历史。


13
有没有来自语言作者以外的人提供的“硬数据”? Stroustrup在C与C ++问题上是可能最不客观的观察者。 - mlibby
3
@mcl. 同意。 @Hostile Fork: 这有点过于笼统了!这完全取决于你在做什么、你使用的编译器和目标硬件。 C ++可以(但并不总是)导致单个对象为中心的方法,这可能会限制性能,因为会出现缓存竞争。游戏行业已经从这方面吃过亏了。 - zebrabox
7
你会在其他语言标签下进行搅局,告诉他们C++可能比C#、Perl、Ruby、Python和Lisp更好吗? - mlibby
@mcl:我关注#qt标签,OP特别询问了Qt。我想可以说“不!Qt是C++,你需要GTK+”,然后就可以结束了,如果你喜欢的话,你可以这样回答。但是我个人认为GTK并不是那么好,我不希望有人因为没有考虑使用C而避免使用Qt,而这种决定是基于错误的假设。因此,我在我的回答中包含了一些讨论。 - HostileFork says dont trust SE
4
除了“你确定不想问别的事情吗?”不是一个答案这一事实之外,想要一个C API的明显原因是因为你不是在使用C语言,而是使用可以与C语言进行接口交互的语言,比如luajit、terra、D、rust等等。我发现很少有好的封装库存在,我宁愿拥有完整的本机C API的功能。 - cib

2

看一下Ecere SDK。它提供了一个跨平台的GUI工具包,并为您提供了eC,这是一种基于C(具有其所有功能)的面向对象语言,非常适合构建GUI。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接