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

wai*_*933 250 c++ user-interface

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

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

vog*_*vog 158

有许多免费的可移植GUI库,每个都有自己的优点和缺点:

特别是Qt有很好的教程和工具可以帮助你入门.请享用!

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

  • 就个人而言,我认为编程到Win32 API很漂亮.我比使用Qt更喜欢它,而且这本身就是一种好处.也许这只是我. (24认同)
  • @mrduclaw,"我认为编程到Win32 API很漂亮".我不惜一切代价去编写可移植的代码.(请注意我使用了"try"这个词,因为有例外......)如何将非可移植代码视为"漂亮"? (15认同)
  • @Trevor Boyd Smith:我想是不同的目标.几乎所有我从未写过的专业代码都可能是跨平台的,所以这对我来说从来都不是一个问题. (10认同)
  • 我的个人经历恰恰相反.与其他任何API相比,Win32 API给我带来的麻烦更多. (5认同)

Bre*_*ton 144

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

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

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

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

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

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

  • “*实际上,将嵌入式网络服务器集成到您的程序中并具有基于 html/web 的界面实际上要容易得多。*”这取决于。如果你想做一些花哨的东西(复杂的 UI、自定义控件、动画等),是的。如果你只是想要一个典型的 GUI(带有通常的控件和原生的感觉),不。 (3认同)

Kir*_*sky 73

独立操作系统的算法" 在三个步骤中用C++创建GUI应用程序 ":

  1. 安装Qt Creator

    在此输入图像描述

  2. 创建新项目(Qt Widgets应用程序)

    在此输入图像描述

  3. 建立它.

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

现在,您已经准备好阅读大量文档,以创建比"Hello world"GUI应用程序更复杂的东西.


KTC*_*KTC 23

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

  • 通过其API直接与操作系统进行交互,对于Microsoft Windows而言,它惊喜地称为Windows API.WinAPI的权威参考是微软的MSDN网站.一个流行的在线初学者教程是Forger的Win32 API编程教程.经典着作是Charles Petzold的Programming Windows,第5版.

  • 使用一个平台(在OS和编译器方面)特定的库,如MFC,它将WinAPI包装到C++类中.对此的参考再次是MSDN.一本经典书籍是Jeff Prosise的MFC编程窗口,第2版.如果你使用CodeGear C++ Builder,那么这里的选项是VCL.

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

  • MFC是邪恶的.如果我别无选择,我更愿意使用WIN API. (9认同)

Spi*_*dey 18

既然我已经到了你现在的位置,我想我可以"回答"你.

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

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

总而言之,GUI开发也有非自由的"环境",例如Microsoft的Visual Studio.对于具有Delphi经验背景的人来说,Visual Studio可能更为熟悉.还提供了Microsoft提供的完整Visual Studio环境的免费替代方案:Visual Studio Express,这对于开始GUI开发来说已经足够了.


Zip*_*pyV 14

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

  • 这是一个有效的选择.我同意它可能不是最佳起点,但它不值得投票. (15认同)
  • 这将介绍Win32 API,这是一种非常低级的GUI编程方法,可以将您与Windows平台联系起来.我不建议这样做. (7认同)
  • 如果您要编写桌面应用程序,那么无需知道操作系统如何真正呈现并与用户交互.如果您只是在不了解基础知识的情况下使用库,那么您将永远不会真正了解正在发生的事情.学习一点点低级别的win32 gui编程将花费时间. (7认同)
  • 我知道这不是理想的解决方案,但它确实有助于了解 Windows 中的 gui 系统是如何工作的。几年前我读过这个教程,现在我知道消息循环是什么以及它是如何工作的。在 .net 中使用 winforms 时,这些知识可能会派上用场。 (2认同)