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

到目前为止,我所有的c++程序都在使用命令行界面,我唯一使用过的语言是PHP,它不支持gui。

我从哪里开始与图形用户界面编程在c++ ?我如何创建一个?

868669 次浏览

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

特别是Qt有很好的教程和帮助你入门的工具。享受吧!

但是请注意,你应该避免特定平台功能,如Win32 API或MFC。这毫无必要地将你捆绑在一个几乎没有任何好处的特定平台上。

既然我已经经历过你现在的处境,我想我可以“回答”你。

事实上,制作GUI没有简单的方法。GUI高度依赖于平台和操作系统特定的代码,这就是为什么你应该开始阅读关于窗口管理api的目标平台/操作系统文档。好消息是:有很多库可以解决这些限制,并将架构差异抽象为单一的多平台API。前面建议的GTK和Qt就是其中的一些库。

但即使是这些也有点复杂,因为大量的新概念,数据类型,命名空间和类被一次引入。出于这个原因,它们通常与一些GUI所见即所得编辑器捆绑在一起。它们使得使用gui的编程软件成为可能。

总而言之,也有非免费的GUI开发“环境”,如微软的Visual Studio。对于那些有特尔斐经验背景的人来说,Visual Studio可能更熟悉。还有微软提供的完整Visual Studio环境的免费替代品:Visual Studio Express,这对于开始GUI开发来说已经足够了。

我发现一个网站有一个“简单的”教程: http://www.winprog.org/tutorial/start.html < / p >

从本质上讲,操作系统的窗口系统公开了一些API调用,您可以执行这些调用来执行诸如创建窗口或在窗口上放置按钮之类的任务。基本上,你得到一套头文件,你可以调用这些导入库中的函数,就像你对stdlib和printf所做的一样。

每个操作系统都有自己的GUI工具包、头文件套件和API调用,以及自己的做事方式。还有像GTKQtwxWidgets这样的跨平台工具包,可以帮助你构建可以在任何地方工作的程序。他们通过在每个平台上使用相同的API调用来实现这一点,但是对那些向下调用本机操作系统API调用的API函数有不同的实现。

与CLI程序不同的是,它们都有一个共同之处,那就是所谓的事件循环。这里的基本思想有点复杂,很难压缩,但本质上它意味着在你的主类/主函数中没有太多的东西,除了:

  • 检查事件队列,看是否有新事件
  • 如果有,将这些事件分派给适当的处理程序
  • 完成后,将控制权交还给操作系统(通常是某种特殊的“休眠”;或“选择”;或“;yield"函数调用)
  • 然后yield函数将在操作系统完成时返回,您将再次循环。

有很多关于基于事件编程的资源。如果你有JavaScript的经验,它是相同的基本思想,除了你,脚本,不能访问或控制事件循环本身,或有什么事件,你唯一的工作是编写和注册处理程序。

您应该记住,GUI编程通常是非常复杂和困难的。如果你可以选择的话,实际上,将嵌入式web服务器集成到你的程序中并拥有一个基于HTML/web的界面要容易得多。我遇到的一个例外是苹果的可可 + Xcode +界面构建器+教程,这使得它很容易成为我所见过的GUI编程新手最容易接近的环境。

给出“以Windows XP为例”的评论,那么你的选项是:

  • 通过API直接与操作系统交互,这对于微软Windows是惊喜惊喜调用Windows API。WinAPI的权威参考是微软的MSDN website. .一个流行的在线初学者教程是< A href="http://www.winprog.org/tutorial/" rel="noreferrer">theForger's Win32 API Programming tutorial 。这方面的经典著作是Charles Petzold的Programming Windows,第五版

  • 使用平台(包括操作系统和编译器)特定的库,例如MFC,它将WinAPI包装到c++类中。它的参考还是MSDN。这方面的经典著作是Jeff Prosise的< A href="https://rads.stackoverflow.com/amzn/click/com/1572316950" rel="noreferrer" rel="nofollow noreferrer">Programming Windows with MFC, 2nd Edition。如果你正在使用CodeGear c++ Builder,那么这里的选项是VCL

  • 使用跨平台的库,如< a href = " http://en.wikipedia.org/wiki/GTK%2B " rel = " noreferrer " > GTK + < / > (c++包装:< a href = " http://en.wikipedia.org/wiki/Gtkmm " rel = " noreferrer " > gtkmm < / >), < a href = " http://en.wikipedia.org/wiki/Qt_%28toolkit%29 " rel = " noreferrer " > Qt < / >, < a href = " http://en.wikipedia.org/wiki/WxWidgets " rel = " noreferrer " > wxWidgets < / >,和< a href = " http://en.wikipedia.org/wiki/FLTK " rel = " noreferrer > FLTK < / >,它包装的具体操作系统的API。这样做的好处是,通常情况下,您的程序可以针对不同的操作系统进行编译,而无需更改源代码。正如已经提到的,它们各有其优点和缺点。在选择使用哪一个时要考虑的是它的许可。对于给出的示例,GTK+ >kmm是在LGPL下的许可证,Qt是在包括专有选项在内的各种许可证下,wxWidgets是在它自己的wxWindows许可证下(重命名为wxWidgets许可证),FLTK例外地在LGPL下。有关参考,教程和书籍,请参阅每个网站的详细信息。

用c++创建. net Windows GUI很容易。

请参阅下面来自MSDN的教程。你可以下载免费的所需的一切(Visual c++ Express)。

当然,你把自己绑在。net上,但如果你只是随便玩玩,或者只需要一个Windows应用程序,那就没问题了(大多数人仍然有Windows…到目前为止)。

OS独立算法"用c++创建GUI应用程序分三步":

  1. < p >安装Qt的创造者

    enter image description here < / p >

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

    enter image description here < / p >

  3. 构建它。

恭喜你,你已经有了c++的第一个GUI。

现在你已经准备好阅读大量文档来创建比“Hello world”更复杂的GUI应用程序。

我使用FLTK是因为Qt不是免费的。我没有选择wxWidgets,因为我用一个简单的你好,世界!程序进行的第一次测试产生了一个24 MB的可执行文件,FLTK 0.8 MB…