【问题标题】:GUI programming c++ or c# [closed]GUI 编程 C++ 或 C# [关闭]
【发布时间】:2011-06-30 06:14:11
【问题描述】:

我正在我的大学学习软件工程课程。我刚刚学习了数据结构,我几乎完成了设计模式。在设计模式课程中,讲师让我们选择在实验室中使用什么语言以及使用什么 IDE。因为,我知道 C++ 主要是我用过的。大部分类使用c#,部分使用java..

嗯,我刚报名了GUI编程春季学期,也是同一个老师,他说我们可以用任何我们喜欢的东西。因为,我从来没有真正使用过 C#,我可能会更好地使用 C++?我已经研究过使用 QT4,但我不知道它有多难,还有多少帮助?因为,不会有太多的讲课..

我正在考虑使用 C#,因为我在 VB.NET 中学习过课程并且使用过不少 winforms。但是,我很想使用 C++ 你有什么想法? c++ gui 是我将来可能在现实世界中使用的东西吗?还是我最好尝试学习 C# 不过,我很想在我的职业道路上坚持使用 C++..

我也不想同时学习 C# 和 GUI。 QT4 是个好方法吗?

【问题讨论】:

  • 使用C++编写GUI代码是没有意义的。但这不是重点,你在那里学习一些东西。这使得底层 API 所针对的语言可能是最佳选择。让您直截了当,没有层来混淆它的实际运作方式。我假设是 C。
  • 太棒了。一大群人的另一个问题是提供他们对 MFC 如何糟糕的不知情且缺乏证据的意见。又对那个不感兴趣了。
  • @David:不是一切,但我想是的。我听到的唯一令人信服的反对理由是你仍然必须学习 Win32。我真的不明白为什么这很糟糕。我觉得我也必须学习这一点才能在 WinForms 中做任何事情。我认为 MFC 让我比直接写入 Win32 快一点。我尝试使用 Qt 来看看有什么大惊小怪的,但它对我来说还不够原生。我立即卸载了它,得到了大约 300 GB 的空间和更小的可执行文件。我认为 WTL 比 MFC 更胜一筹,但肯定不足以证明仇恨是正当的。
  • @cody 我发现 mfc 很难理解,但我习惯了 vcl
  • @David:我从未使用过它。如果您直接了解 Win32,我不确定为什么 MFC 难以遵循。它只为您处理简单、常见的事情。我只是认为我不能为了 Borland 产品而放弃 Visual Studio。我从来没有发现它们令人印象深刻,但这可能与无缘无故讨厌 MFC 的人一样教条。无论如何,说“我对那个 GUI 工具包没有经验”与“那个 GUI 工具包很烂,没有人应该使用它,它是撒旦的产物”是一个很大的区别,就像我听说的 MFC 一样。很累。

标签: c# c++ user-interface


【解决方案1】:

对于 GUI 编程,您可以使用 Visual C++。

很难用 VC++ 编写所有代码,所以人们选择 MFC。 MFC 提供了 100 多个让生活更轻松的类。所以你需要做的就是学习VC++的基础,学习MFC。

【讨论】:

  • MFC 已经过时,只能用于遗留项目。更不用说它在 Windows 之外是不可移植的。使用 QT 或 dotNET,OP 会更好。
  • @Emile:一些东西是如何“变得过时”的?那是什么意思?它是通过什么过程发生的?谁负责让它过时?你如何判断某物是陈旧的?或许更重要的是,MFC 比 WinForms 过时了吗?
  • 虽然我这样做了,但出于同样的原因。
  • @Cody:过时,我的意思是不再时髦。几乎没有人在开发基于 MFC 的新项目。甚至微软也不再积极推广它。如果学生要学习 GUI 库,最好是使用广泛的库,以便学生更容易获得帮助。
  • @Emile 我想这取决于您要学习的内容。如果您希望某人有足够的知识来编写自定义组件,那么我希望他们学习相当低级的知识,例如本机 Win32、WndProc、消息队列。如果您希望他们成为 GUI 库的消费者,那么诸如 WinForms、Qt、VCL 之类的东西。我同意它们基本相同。但是,如果您想使用金属,则需要将沉重的框架移开。
【解决方案2】:

qt 并不难使用。我已经尝试了一些 c++ 的 gui 工具包,这是我在 c++ 方面的经验

Qt

对于 c++ 开发和 gui,我绝对倾向于 Qt,而不是 win32 api、Microsoft 基础类等替代库。

优势

  • qt是跨平台的,可以在windows、linux、symbian、windows ce、mac osx上使用
  • qt 并不难学。如果你了解 c++ 类的基础知识和一些模板编程
  • qt 用于专业创建 gui。我不记得确切,但我认为 Autodesk maya 和 adobe photoshop 可能正在使用 qt 作为他们的 gui
  • qt4 不仅仅是 gui 编程,它还有用于网络、国际化、视频和音频声子、动画框架等的库

缺点

  • 它不是本机库,因此您的应用程序会比使用 win32 api 时更大,但即便如此我仍然认为它小于 .net 运行时间

现在开始学习 qt

  • 找到c++ gui programming using qt4 second edition 一书。或其他好的资源
  • 下载 Visual Studio 2008 的 qt sdk
  • 下载用于 Visual Studio 2008 的 qt Visual Studio 插件
  • 创建一个新的 qt4 项目并编译并运行您的第一个项目

C#

我应该从一开始就声明我不是 c# 开发人员,但我知道它有一些好东西

已知优势

  • 允许您使用 windows 窗体、wpf、linq(语言集成查询)等
  • wpf 是您作为 c# 开发人员最感兴趣的内容

缺点

  • 与所有 .net 语言一样,它仍然比用 c++ 制作的本机应用程序慢
  • 不能移植到不同的操作系统,如 mac osx、linux(但请记住,大多数用户 (90%) 正在运行 WINDOWS)
  • 如果您的目标用户是 windows xp,您将不得不下载 .net 以使您的应用程序正常工作,这给他们带来了不便。对我来说,这是 .net 语言的最大缺点,因为我认识的大多数用户的互联网连接速度都很慢

开始学习使用 c# 进行 gui 开发

  • 找到释放的书籍 windows 演示基础或任何好的 c#/ wpf 书籍

警告

  • 我不是 c++ 或 c# 方面的专家,我只是提供我的意见或经验。
  • 我在 c# 方面的经验有限

【讨论】:

  • 我下载并安装了 SDK 和 VS 插件。我如何将 QT 与 VS 一起使用?我是否使用 QT 创建器来创建应用程序?
  • 如果你习惯在visual studio工作,就不用换成qt creator了。此外,如果您使用 qt creator,下载大小会变得更大。就我个人而言,我只将 sdk 与 Visual Studio 一起使用,原因很简单,我习惯于在 Visual Studio 中工作。我将向您发布有关如何开始的链接。现在您可以查看随 sdk 提供的示例以了解可能性
  • 很好的答案,但要补充一点:C# 有一个非常好的 Winforms GUI 设计器,比我在 QT 世界中看到的任何东西都要好,而且比 WPF 的要好得多。所以如果你要创建一个 Winforms 应用程序,C# 绝对是比 C++ 更好的选择。
  • 有一个支持 Windows/Linux/Mac 的 C#/dotNET 克隆:Mono 框架 (mono-project.com)。 (我没用过,微软也没用过。)
【解决方案3】:

我之前使用过WxWidgets (C++)。这很容易也很有趣。 Afaik,大量的 UI 设计是使用设计编辑器或各种 XML/LUA 导入器完成的,因此您使用的工具包本质上并不重要,因为您将编写的事件驱动代码几乎对所有内容都非常相似。

WxWidgets 教程很棒,论坛也很有帮助。如果您想知道 WxWidgets 与其他工具包的比较,它们有一个 great wiki page dedicated to it

【讨论】:

    【解决方案4】:

    另一个问题,其回答可以为永恒的时间进行辩论。根据我的经验,我想说两种语言都有同样成熟的工具包来创建用户界面。

    因此,对于任何项目,它只取决于您的偏好。一般来说,使用 .NET 开发 UI 会更容易,因为 Visual Studio 提供了出色的 RAD 支持,但遗憾的是,它无法为基于 C++ 的项目提供该级别的复杂性。

    话虽如此,请记住用户界面存在于所有操作系统上;不仅仅是 Windows。因此,您应该专注于 GUI 编程的基本原则,并将该语言仅视为将您的想法付诸实施的一种手段。

    因此,如果您真的想在所有平台上进行 UI 编程;那么 C++ 是最好的选择(当然现在你有 Mono,但不确定他们是否有你正在寻找的基于 QT 的工具包)。

    相当拗口 - 但要简短: 这完全取决于您的选择和学习。如果您想学习 C# 并使用它,请继续。但是,如果您对 C++ 感到满意,您仍然可以使用它,并且没有什么可以在 C# 中完成,但无法使用 C++ 完成。

    【讨论】:

    • 在第二段中,您将 .NET 与 C++ 进行比较,就像 .NET 是一门语言一样——它不是。此外,在 VS 中,C++/CLI 一种 .NET 语言,其支持不亚于任何其他 .NET 语言(事实上,它是 .NET 语言中最强大、最灵活——也可能是最危险的——因为它允许 CLI 和本机代码混合使用)。
    • 是的,没错。通过 .NET,我实际上是指 C#。你对 C++ CLI 的看法是对的 :)
    【解决方案5】:

    嗯,我不可能给出比 Dr.Deo 更好的答案,但我可以分享我的一点。我以前做过很多 GUI 编程(5 年多以前,在 Delphi 或 C++ 中使用 Borland 的 VCL)。我最近不得不为一个小项目制作一个 GUI,所以我选择了 Qt4。在没有任何 Qt4 知识的情况下,我几乎可以在一天内完成 GUI(当然,这是一个简单的单窗口 GUI)。我发现它非常易于使用且快速学习。如果您有任何 GUI 经验,那将非常直观。至于所需的 C++ 知识,它很少。您必须对大量的继承和多态性感到满意,但这是非常典型的 GUI 工具,它实际上只是 OOP 的基本 C++ 知识。

    我认为有几个人已经提出了跨平台的观点。这将在未来变得越来越重要,因为 Windows 的替代品正在成为主流(基本上所有与我一起工作的人都拥有 Mac 或运行 Linux 发行版)以及更多介于手机和平板电脑之间的产品正在出现.

    而且,无论如何,您用于编写 GUI 的语言并不那么重要,它是工具集。我认为Qt4非常完整。它还省去了与现有代码交互的麻烦(更不用说学习 C#)。最后,Qt4 非常适用于任何 IDE 或构建系统(如果您不想将代码切换到 qmake 和/或 Qt-Creator)。

    【讨论】:

      【解决方案6】:

      我正在考虑使用 C#,因为我在 VB.NET 中学习过课程并且使用过不少 winforms。但是,我很想用 C++ 你有什么想法?

      如果您想使用 Windows 窗体和 C++,那么您可以使用 C++/CLI(以前称为托管 C++)。它使用 C++ 的扩展来支持 .NET,并且是唯一允许混合 CLI 和本机代码的 .NET 语言,因此一旦您将接口代码粘贴到应用程序代码中,您就可以专门使用 ISO C++。

      也就是说,除了我一直在为现有 C++ 代码实现接口之外,我发现简单地学习 C# 更容易,它从头开始设计为 .NET 语言,因此通常更适合。

      在 ISO C++ 领域,选择包括 Qt 和 WxWidgets,它们都是跨平台的,并且受到书籍和在线信息和社区的良好支持。

      【讨论】:

        【解决方案7】:

        这取决于你想学什么。

        如果您想了解 GUI 库是如何工作的,而不是如何使用它们,那么您想看看普通的 Win32。

        如果您想学习如何使用它们,那么您会发现 C# 或 VB 与 WinForms 最容易上手。当然,它们让您可以使用出色的设计师。

        在学习基础知识时不要担心跨平台等问题!您应该专注于学习原则而不是细节。

        【讨论】:

          【解决方案8】:

          正如@David Heffernan 所说,除非您必须拥有跨平台(过早优化),否则不要担心跨平台。大多数跨平台套件提供的灵活性是有代价的。此外,根据我作为开发人员和用户的多年经验,本机平台工具包通常会提供更好的最终用户体验(对于允许和不允许用户对每个控件或界面进行什么和如何操作,通常不会感到惊讶)。

          在学习环境中,您要考虑希望在一个学期内完成什么。具有连续里程碑的典型三个月整体学期计划表明您需要低摩擦。学习一个 gui 库可能是一个很好的成就,但你可能需要在开始之前至少对环境或上下文有一些基本的了解,以便及时完成中间任务:大概是交互和其他一般用户体验是班级重点的核心。

          出于这些原因,我会考虑坚持使用 c++,因为您对语言和工具的范式和基础有一定的了解。但是,因为它是一个学习环境,我强烈认为一些不那么主流的东西,但在图书馆里成熟有潜力。我可能会查看硬件加速的窗口库,如果针对 unix/linux,则可以是基于 OpenGL 的 xgl,如果针对 Windows,则可以是 Windows Presentation Foundation。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-17
            • 1970-01-01
            • 2011-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-22
            • 2011-04-12
            相关资源
            最近更新 更多