C++小型本地跨平台GUI框架

6
我用Boost在c++中编写了一个小程序,它运行良好,因此我想给它一个图形界面,以便更容易使用。
为此,我正在寻找一个提供本地外观和感觉的小型跨平台框架。支持Windows和Linux就足够了,目前我不需要os x...
我曾经在其他项目中使用过wxWidgets,但是设置所有内容并将这个大型库与软件一起发布很麻烦。
但是我真的很惊讶于使用真正的本地控件。 为了使程序保持小巧,我还尝试了fltk,但它的外观很糟糕。
我只需要一个没有网络支持或其他花哨功能的简单框架。
所以我的问题是:是否有符合所有要求的框架?如果没有,哪些框架至少满足其中一些需求?
提前感谢!

所有基本控件:按钮、文本框、输入框、单选按钮,如果可能的话还有进度条。 - tbolender
6
跨平台GUI框架并不等同于小型化。 - Hans Passant
那么,不是树、网格、图表 - 你会需要它们吗? - Lou Franco
也许有一天会有树,但没有网格,绝对没有图表。 - tbolender
3
你可以只使用部分Qt库而不必全部引入。大多数情况下,你只需要QtCore和QtGui就足够了。此外,将其交付给最终用户也非常容易。 - wkl
2
我也会选择Qt。它看起来也是最好的。 - Falmarri
9个回答

7
当一个软件名称中包含“框架”一词时,它几乎从来不会很小。无论如何,图形框架/库往往很大,因为它们需要处理很多东西。Qt 可能是跨平台 GUI 的最佳直接库,但它绝对不构成“小型框架”。另一方面,在 Linux 系统上,Qt 很可能已经预装了。此外,它的大尺寸绝对值得它的价格。

4

wxWidgets是GUI工具包中比较小的一个,而且它是跨平台的。

http://www.wxwidgets.org/

你已经提到了它,但就跨平台工具包而言,这是我见过最小的之一。

我唯一的建议是,你可以将代码封装成C库,然后将其链接到另一种语言中。例如,在Windows上使用.NET,在Linux上使用mono,或者甚至是基于Java的应用程序(尽管它们并不总是看起来非常本地化)。然后从那里使用你的库。


他在问题中提到了wxWidgets。虽然我同意它可能比Qt小,但考虑到他的参数,这可能是他能得到的最好的选择。 - John D.

2

Ultimate++可能包含您需要的内容。(虽然在常见问题解答中他们声称自己的库非常大,但我觉得还好。)


看起来非常有趣。谢谢你的提示,我会仔细研究它。你知道这个框架是否容易设置吗? - tbolender
它运行在Windows上,不确定Linux情况,似乎取决于发行版。 - js.

2

不要忘记也要检查一下juce

技术相关内容。

似乎是一个选项。它是否模拟控件?我无法找到答案...但还是谢谢你 :) - tbolender
1
是的,JUCE使用自己的控件并从头开始绘制所有内容。 - Christof Schardt

1

Qt的表现非常出色,但它并不是很小巧。我发现跨平台GUI中真正缺乏“小巧”的选择。你可能会尝试在各个地方使用#ifdef来抽象化你的GUI,或者使用Qt/wx。


对于大量使用#ifdef语句,不是我想要的。但还是谢谢你的理解 :) - tbolender

0

0
如果你想让它变小,只需将GUI写两次——一次在MFC中,一次在X中。你的GUI听起来足够简单。构建自己的小抽象,只包含你需要的内容。

-1

像其他人提到的那样,你不能在同一句话中混合使用“跨平台”和“小尺寸”。

更多的工作,更小的尺寸: 我可以建议的一个解决方案是使用UI部分的本地Python绑定。由于您已经在使用boost,因此应该很容易让Boost.Python在C++空间和Python空间之间通信。您已经在Linux上使用了Python,并且它是Windows上的一个20-40MB软件包(我不记得最新版本有多大)。但是在Windows上,您将不得不使用win32绑定,在Linux上使用gtk/qt绑定,因此需要更多的工作。嗯,维护太麻烦了,放弃这个想法吧。

适度的工作量,更小的尺寸但具有非本地控件: 您可以尝试使用clutter或freeglut来完成UI工作,但我个人没有使用过它们,所以不知道它们是否为您的应用程序提供完全本地的外观。但与wx或qt相比,它们的大小要小。

更少的工作,更大的尺寸: 如果您已经熟悉WxWidgets,则可以使用它,否则我建议使用Qt。

您还可以查看其他一些选择:http://en.wikipedia.org/wiki/List_of_widget_toolkits

混乱:http://www.clutter-project.org/about FreeGLUT:http://freeglut.sourceforge.net


请告诉我您使用 Clutter 的意思。我了解它是一个用于游戏(如SFML)的框架。但是我在文档中找不到创建真正控件的可能性。 - tbolender
就像我说的那样,我个人还没有使用过Clutter,但是你可能无法使用本地控件来使用Clutter。你很可能需要重新设计您的用户界面,使其类似于平板电脑中的应用程序。 - Tareq A. Siraj

-2

3
当然可以 ;) 但是我刚刚知道它是一个非常强大但也非常庞大的库,类似于wxWidgets。我错了吗? - tbolender

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