C++ GUI编程建议

17

我已经写了一年左右的C++控制台/CMD-line应用程序,现在想进入Windows GUI应用程序领域。 对于那些已经走过这条路的人,你们能给我什么建议/技巧?例如:好的阅读材料、教程、方法策略等等...

我知道这是一个非常广泛的问题,但我真的不知道该从哪里开始,因此也不知道如何正确地提出这个问题。

12个回答

36

我强烈推荐使用Qt Libraries,理由如下:

  1. 该框架可在Windows、Linux、MacOS X等多个移动系统上免费使用。自4.5版以来,其许可证为LGPL,这基本上意味着您甚至可以在商业应用程序中使用Qt。
  2. Qt的设计非常出色,例如,他们使用现代设计模式和非常一致的界面设计(我不知道有多少其他库像Qt一样完美地使用面向对象的思想)。使用Qt就像使用Boost一样:它将提高您自己的编程技能,因为它们使用了如此美丽的概念!
  3. 他们非常快速,例如在渲染方面(由于OpenGL、DirectX等不同的后端)。只需看看这个视频,你就会看到Qt可以轻松实现但使用本地Windows、Mac或Linux编程难以实现的效果。
  4. 他们有真正的优秀文档,有大量的教程和非常好的参考资料。您可以通过提供的文档轻松开始学习Qt!在线文档也可供参考,自行查看。
  5. 如前所述,Qt是跨平台的;您只需编写一份源代码即可在所有重要操作系统上运行。当您可以“免费”获得Mac和Linux时,为什么要将自己限制在Windows上呢?
  6. Qt比“只有”用户界面多得多;他们还提供网络和数据库功能、OpenGL绑定、全功能WebKit浏览器控件、多媒体播放库等等。

老实说,我曾经在本地开发Windows软件上浪费了几年时间,而我本可以更加高效。


太好了,我正在寻找这个答案来进行我的C++ GUI编程 :) - Dzung Nguyen
点击此处了解Qt和Modern OpenGL的介绍。点击此处查看使用Qt 5.5和Modern OpenGL绘制三角形的简单教程。我发现使用Qt比任何本地OpenGL库更简单。 - steventaitinger

7

对于C++,你有两个选择,本地或管理。

对于本地开发,我的团队(在微软的Windows部门)使用Windows Template Library。它对我们非常有效。

你应该学习Win32的基础知识以及窗口工作方式。经典的著作是Programming Windows®

对于管理开发,你可以使用C++和Windows Forms。但是,Windows Forms已被Windows Presentation Foundation (WPF)所取代。


4
大多数窗口库和技术使用类似的习惯用语。选择一个并学习它。 Windows Template Library 是一个非常好的外壳,适用于 Microsoft Windows,并保持 C++。
对于跨平台的 C++ 窗口工具包(它们可以在 Microsoft Windows 上以及其他平台上工作),您可以尝试 QTwxWidgets

4
我对于Windows C++ GUI编程的最佳建议是不要进行Windows C++ GUI编程。
我知道如果没有进一步解释,这个答案非常不充分/傲慢,所以我要指出你并未表示你需要进行C++ Windows GUI编程,而是说你“想学习Windows GUI应用程序”。如果是这种情况,而且你没有非常特定的原因使用C++(例如一个巨大的现有MFC遗留代码库或者一堆C++代码,你想为其构建一个前端但将其暴露给.NET代码将会很麻烦),那么选择.NET路线,开始学习使用你所选的C#或其他.NET语言的Windows Forms,更好的是WPF,会更加容易和高效。
如果你确实需要使用C++,那么我会推荐像Qt或wxWidgets这样的第三方工具包,因为Microsoft的C/C++ GUI编程工具现在的状态非常糟糕。

3

对于Windows GUI,如果您想直接使用API,那么要经常参考MSDN。

我学习基础知识最喜欢的资源是theForger's教程,但还有数百本书和其他网站可供选择。


这并不是针对你的贬低,而是针对微软的。 ;) - Jason S

2
我想开始的重要地方是你的工具包。你标记了visualc++,所以我假设你正在看它,不过请记住还有其他工具包,比如Qt。
我建议从Microsoft的教程开始

1
+1 给Qt。我会把文档放在GUI系统要求清单的首位。Qt 的文档非常好,有一个庞大的社区在支持它,还有几本书专门讲解它。如果你是独立工作,没有其他团队成员可依赖,那么好的文档就显得尤为重要。其他选择包括wxWidgets、MFC、WTL、FLTK等等,每个都有优劣。例如,FLTK很小,只提供GUI界面,而Qt和wxWidgets还包括网络和数据库访问等功能。目前,Qt似乎具有最大的发展动力,如诺基亚收购后发布的Qt Creator,使您可以在Visual Studio之外开发应用程序。

1

我已经很久没有在Windows GUI上使用C++了,我的建议是除非你有非常好的理由,否则尽量避免在Windows GUI中使用C++。如果你需要一些性能,C#已经足够满足90%的情况,如果你需要更强大的功能,请编写一个C++ dll来处理性能关键的部分,并从Windows Forms或WPF应用程序中调用它。这将节省你大量的时间。当然,如果你有不同的意见,我完全尊重。


1

不要只局限于WPF、VC++或Qt,您还可以尝试以下几个库:

  • OpenFrameworks
  • Processing
  • ...
  • 这里有一个使用Openframeworks开发Gui的活跃项目:
    http://www.syedrezaali.com/blog/?p=2172


    1

    第一个问题是,您想在C++中开发自由、开源、个人使用或商业应用程序吗?

    1. 如果您想进行个人使用!那么您可以选择一些好的C++工具包、框架或API。
    2. 如果您想开发一个开源或免费的GUI应用程序。那么您可以选择具有GPL或符合您需求的任何开源许可证的C++工具包、框架或API。
    3. 即使您可以使用LGPL许可证的开源工具包、框架或API开发商业应用程序。

    第二个问题是,您想为Windows、Mac、Unix或Linux开发还是这些平台都要开发,甚至是移动平台?

    如果你是Windows用户,并且只想为Windows开发,而不是跨平台,那么你可以选择Win32 API。尽管学习Win32 API比较困难,但它可以让你完全控制机器。相信我,没有其他工具可以提供对机器的完全控制。如果你因为任何原因不喜欢Win32 API,可以选择MFC,这是微软的另一种技术,但它不是免费的,而且现在已经过时并且受到的关注较少。如果你决定使用.NET平台进行开发,你可以选择C++/CLI,这是一个扩展了C++语言用于开发.NET应用程序的工具。.NET提供类型安全、面向对象编程和内置垃圾回收器,为你提供了与Windows和x86或x64机器相关的所有API的一个包。 .NET有自己的世界!微软已经决定将.NET移植到其他操作系统中,Mono项目就是一个例子...你可以使用.NET开发几乎所有类型的应用程序。
    如果你想为跨平台开发C++ GUI应用程序,那么Qt、WxWidgets和U++都可以帮助你。你可以使用这些库编写一次,然后在任何地方部署。许多开源IDE和编译器也可用于轻松开发C++应用程序。请注意,如果你不想为跨平台开发,任何跨平台库都会增加额外的开销,并且不可避免地增加可执行文件的大小。

    你的C++知识足够好,可以编写软件系统吗?

    实际上,如果你对C++的了解不够深入,不理解面向对象编程方法,如封装、类、接口、类型、编程模式等,就无法充分利用任何工具包。 不要忘记,每个工具包、框架或API都是用某种编程语言实现的。如果你非常了解这种语言,就可以很好地使用工具包。我想你会明白我的意思。


    不,Microsoft Visual Studio C++ MFC是免费的,一直都是,并且没有版税。尽管微软已经9年没有正式升级它(他们一直忙于C#的发展),但它拥有庞大而老化的安装基础。然而,有一个供应商一直在保持MFC的更新和极其丰富:BCGSoft。BCGSoft在2007年向微软交付了其原始版本的MFC,现在仍在改进MFC,并提供每年少量费用的绝佳帮助台。如果您喜欢使用非专有的ISO标准C++完全控制GUI开发,那么BCGSoft是唯一的选择。 - rtischer8277

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