如何在C ++中构建图形用户界面?

时间:2009-07-27 01:01:56

标签: c++ user-interface

到目前为止,我所有的C ++程序都使用命令行界面,而我遇到的唯一其他语言是PHP,它不支持这一点。

从哪里开始使用C ++进行图形用户界面编程?我该如何创建一个?

9 个答案:

答案 0 :(得分:147)

有很多免费的便携式GUI库,每个库都有自己的优点和缺点:

特别是Qt has nice tutorials和帮助您入门的工具。享受!

但请注意,您应避免使用特定于平台的功能,例如Win32 API或MFC。这会在特定平台上不必要地绑定你几乎没有任何好处。

答案 1 :(得分:136)

本质上,操作系统的窗口系统公开了一些API调用,您可以执行这些调用来创建窗口等工作,或者在窗口上放置一个按钮。基本上你得到一套头文件,你可以在那些导入的库中调用函数,就像你使用stdlib和printf一样。

每个操作系统都附带了自己的GUI工具包,头文件套件和API调用,以及他们自己的工作方式。还有像gtk,qt和wx小部件这样的跨平台工具包可以帮助您构建可在任何地方工作的程序。他们通过在每个平台上进行相同的API调用来实现这一点,但是针对那些调用本机OS API调用的API函数实现了不同的实现。

他们都有一个共同点,一个与CLI程序不同的东西,叫做事件循环。那里的基本思想有点复杂,难以压缩,但实质上它意味着你的主类/主函数不会有很多东西,除了:

  • 检查事件队列是否有任何新事件
  • 如果有,将这些事件发送给适当的处理程序
  • 当你完成后,将控制权交还给操作系统(通常带有某种特殊的“睡眠”或“选择”或“收益”功能调用)
  • 然后当操作系统完成时,yield函数将返回,并且你有另一个循环。

基于事件的编程有很多资源。如果您有使用javascript的经验,那么基本的想法是相同的,除了您,脚本编写者无法访问或控制事件循环本身,或者有什么事件,您唯一的工作就是编写和注册处理程序。

您应该记住,GUI编程通常非常复杂和困难。如果您有选择权,那么将嵌入式网络服务器集成到您的程序中并拥有基于html / web的界面实际上要容易得多。我遇到的一个例外是Apple的cocoa + xcode +界面构建器+教程,这些对于我刚看过的GUI编程新手来说,它是最容易接受的环境。

答案 2 :(得分:68)

OS独立算法“使用C ++在三个步骤中创建GUI应用程序”:

  1. 安装Qt Creator

    enter image description here

  2. 创建新项目(Qt Widgets Application)

    enter image description here

  3. 构建它。

  4. 恭喜,您已经在C ++中获得了第一个GUI。

    现在你已经准备好阅读很多documentation来创建比“Hello world”GUI应用程序更复杂的东西。

答案 3 :(得分:23)

鉴于“以Windows XP为例”的评论,您的选择是:

  • 通过其API直接与操作系统进行交互,对于Microsoft Windows来说,这是一个意外的惊喜电话Windows API。 WinAPI的权威参考是微软的MSDN website。一个流行的在线初学者教程是theForger's Win32 API Programming Tutorial。经典着作是Charles Petzold的Programming Windows, 5th Edition

  • 使用一个平台(在操作系统和编译器方面)特定的库,例如MFC,它将WinAPI包装到C ++类中。对此的参考再次是MSDN。一本经典着作是Jeff Prosise的Programming Windows with MFC, 2nd Edition。如果你使用CodeGear C ++ Builder,那么这里的选项是VCL

  • 使用包含GTK+(C ++包装器:gtkmm),QtwxWidgetsFLTK的跨平台库特定操作系统的API。这些的优点是,通常,您的程序可以针对不同的OS进行编译,而无需更改源代码。正如已经提到的,它们各有其优点和缺点。选择使用哪一个时的一个考虑因素是其许可。对于给出的例子,GTK +& gtkmm是LGPL下的许可证,Qt是各种许可证,包括专有选项,wxWidgets属于自己的wxWindows许可证(重命名为wxWidgets许可证),FLTK属于LGPL,但有例外。有关详细信息,请参阅每个人的网站以获取参考,教程和/或书籍。

答案 4 :(得分:18)

由于我已经到了你现在的位置,我想我可以“回答”你。

事实上,没有简单的方法来制作GUI。 GUI高度依赖于平台和操作系统特定的代码,这就是您应该开始阅读窗口管理API上的目标平台/操作系统文档的原因。好处是:有许多库可以解决这些限制,并将构建差异抽象到单个多平台API中。之前建议的那些,GTK和QT,是这些库中的一些。

但是,由于引入了许多新的概念,数据类型,命名空间和类,因此即使这些也很复杂。出于这个原因,他们使用捆绑了一些GUI WYSIWYG编辑器。他们几乎可以使用GUI创建编程软件。

总而言之,GUI开发还有非免费的“环境”,例如Microsoft的Visual Studio。对于具有Delphi经验背景的人来说,Visual Studio可能更为熟悉。还提供了Microsoft提供的完整Visual Studio环境的免费替代方案:Visual Studio Express,这足以启动GUI开发。

答案 5 :(得分:15)

我找到了一个带有“简单”教程的网站: http://www.winprog.org/tutorial/start.html

答案 6 :(得分:6)

Qt是最好的。

答案 7 :(得分:3)

很容易用C ++创建.NET Windows GUI。

请参阅MSDN中的以下教程。您可以为free下载所需的所有内容(Visual C ++ Express)。

当然你把自己绑在.NET上,但是如果你只是玩游戏或只需要一个Windows应用程序就可以了(大多数人现在还有Windows ......)。

答案 8 :(得分:2)

我使用FLTK因为QT不是免费的。我没有选择wxWidgets,因为我的第一个带有简单hello world程序的测试产生了24Mb的可执行文件,fltk 0.8MB ......