将GUI添加到C++应用程序的最简单方法

10

我正在使用C++编写一个数字软件,并想要添加一个GUI(主要用于Windows)。我知道如何使用现代语言(如Java或.NET)中舒适的编辑器来制作GUI。现在我的问题是,添加GUI前端的最简单和最舒适的方法是什么。在工具的选择上完全自由(开源和可移植性会很好),但也请记住,如果GUI是用另一种语言(如C#)实现的,则需要维护多少样板代码和接口。

请不要建议将整个项目从C++切换!请注意,程序不需要太多C ++代码和GUI之间的交互。


2
你看过.NET了吗? - Fortyrunner
7
Qt是什么?很棒的集成开发环境和工具集,而且它可以在LGPL下使用。 - Adam
@Adam:与安装了Visual Assist X的VS10相比并不是很好。但为什么不把这个作为答案呢?@User:鉴于这是一个主观性问题,这可能更适合在Programmers.SE上提问。 - Billy ONeal
FLTK绝对是最简单的选择 - http://www.fltk.org - DejanLekic
8个回答

7
这个回答中关于ISO C++的评论编辑得很差。这里提出的解决方案都不会强制要求计算代码切换到不同的C++方言。GUI代码本身可能是另一回事。
在使用托管C++和Windows Forms方面,答案可能是最实用的。大部分与UI相关的代码将在C++方言(扩展)中,其中.NET垃圾收集指针将与传统的ISO C++指针并存。我没有使用过这种方法,但从我所读的内容来看,它可能比我使用的方法更好。
如果您不想为此任务投资.NET知识,那么MFC可能更实际。它使用标准C++结构包装Windows API。Windows API使用特定的调用约定,而C++通常不使用它,需要扩展C++才能使用它,但这与调用一些extern "C"函数的C++程序没有什么不同。Visual Studio具有非常好的GUI布局工具,可以很好地布置对话框和将对话框小部件与反映小部件状态的变量进行接口处理。我用过这个。如果您可以将GUI简化为对话框,则这将是一个很好的选择,否则您将使用MFC的布局管理窗口之一。
显然,上述选项不适用于您可能考虑的其他平台。
还有各种工具包,它们在其他平台上诞生,并已经被很好地移植到Windows。GTK、QT、FLTK和WxWindows是其中的几个。我没有使用过与这些工具包一起使用的任何对话框布局/应用程序设计工具,也没有使用过QT。当我最后回顾QT时,它有一个专门的预处理程序通行证,用于GUI代码。除此之外,这些可移植工具包就是纯ISO C++。
作为一个非常特殊的选项,可以使用“libx”编写X Window System协议。据我所知,这将不涉及任何非ISO C++代码。

1
我强烈建议不要在C++/CLI(“托管C++”)中使用任何GUI(WinForms或WPF),因为存在与Visual Studio Designer的问题。最好使用C#来创建GUI,并通过COM或自定义的C++/CLI代理将其暴露给C++项目。我已经“吃过亏”,从中学到了教训。 - surfen

5

Qt是一个不错的选择。它很稳定,拥有出色的C++接口(与MFC相比),并且有一个方便的设计工具。
然而,从零开始学习它可能需要投入更多的时间和精力。它确实有一定的学习曲线。


5
+1 -- 但是我想指出,很难称Qt为C++库,因为在使用它之前需要先安装另外一个编译器。 - Billy ONeal
1
一个工具。一种语言。我们不称 lexyacc(或 flex/bison)为 C 库,尽管你将 C 代码放入其中并且它们生成 .c 文件。很遗憾,它们依赖预处理 -- 预处理所做的所有好事情(信号/插槽)在纯 C++ 中也是可能的(至少在“现代时代”,而不是 Qt 设计时)。 (根据我的经验,“反射”部分仅用于隐藏人们设计中的问题。)这很令人沮丧,因为 Qt 在几乎所有其他方面都是如此高质量的库。 - Billy ONeal
我使用了"反射"来创建一个动态生成的GUI。这真的是一个非常重要的"仅仅"。 - shoosh

4

wxWidgets是C++跨平台GUI的不错选择。


3
尽管我喜欢C++,但是用它来构建GUI很困难。我会建立一个快速的C# WinForms应用程序,它可以让你使用像Visual Studio的可视化设计工具(拖放按钮等),并使用P/Invoke调用你的C++应用程序。
C++通常会产生更平滑和更好的GUI,但开箱即用需要更多的工作。

同意。一个人也可以将现有的C++项目包装成OCX或C++/CLI库包装器,以获得更加友好的编程接口。但是不要考虑使用C++/CLI来做任何GUI界面! - surfen
@surfen:我不是在说C++/CLI。(据我所知,在任何情况下,您都可以在那里获得可视化设计工具) - Billy ONeal
我的意思是:顺便说一句,不要考虑在C++/CLI中做任何GUI。我并不是不同意你的答案,只是想为其他读者提供一些旁注。当然有设计师,但我曾经走过这条路,几乎因此失败了一个重要项目。与C#相比,C++/CLI中的设计师非常有缺陷和局限性。 - surfen

1
如果只是一个由大多数标准控件组成的简单GUI,我会使用MFC来完成。它可能已经过时并且从未真正好用,但它仍然有用,可以快速地创建本地Windows GUI界面。

1

我不得不对所有这些解决问题的方法感到好笑。生活很美好。我的回应是我管理的一个产品。XVT可以为您完成它。最简单的方法是让我们为您完成或提供模板以达到目标。这只是一个问题,如果您有更多的钱而不是时间。那么我会建议您考虑我们。这将是您付出最少的努力和时间最短的选择。


0
MFC基于对话框的应用程序可以满足需求。

0

根据您的需求,Mikko制作了一个很不错的imgui,可以很快地插入和使用。它是用opengl完成的,所以它不会成为您标准的Windows-gui,但它非常小且易于使用。您可以从这里下载r'lyeh的版本: http://code.google.com/p/colony9/source/browse/include/goo/imgui.h

这是我知道的最简单、最舒适的方法,但它依赖于SDL。


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