【问题标题】:Writing cross-platform application with a complex GUI使用复杂的 GUI 编写跨平台应用程序
【发布时间】:2010-07-10 10:50:26
【问题描述】:

我想开发一个具有复杂 GUI 的应用程序(带有动画的组合框、带有样条的图表、透明层……)。我在 C# 2.0 方面有很好的经验,我正在研究 WPF,但我读到了,不幸的是,没有将 WPF 移植到 Mono 的计划。

  • 如果我坚持使用 C# 并使用 OpenGL(通过 OpenTK 创建自定义 GUI 控件,我觉得这将是一项艰巨的工作(与GTK#,调试,难以用于设计表单)。

  • 我可以使用 Java(带 JOGL),但我不是很熟练,也不知道性能问题。

  • 最后一个选项是 C++,但我必须做一个大的revision(距离我上次使用它已有好几年了),我发现开发起来很困难C++ 中的 GUI 和可移植应用程序。 (也许我错了!不过,我还是很害怕用这种语言开发如此复杂的应用程序。)

你有什么建议?我最好选择 C# + OpenTK、Java + JOGL,还是回到 C++?

【问题讨论】:

  • 您的要求是否说明您需要为多个平台进行开发?
  • Gtk# 在 Mono 和 MS 的生态系统中都可用 - 有什么问题吗?
  • 更简单(原文如此)和最强大的选择是使用 Qt。

标签: c# c++ wpf opengl jogl


【解决方案1】:

我会选择 Qt。看看http://qt.nokia.com/products/。如果你害怕 C++(但没有理由害怕它),你可以试试 Java Swing。我认为这些是多平台桌面 GUI 开发的最佳选择。

【讨论】:

  • 我想开发新的自定义控件,例如:dev.blender.ir/images/…,我需要一个复杂的时间线/轨道控件,例如:synthtopia.com/content/wp-content/uploads/2007/06/… Swing 或 Qt 可以帮助我吗?
  • Qt 允许 - 鼓励 - 开发人员将他们的框架子类化为自定义控件(“小部件”),并拥有一个强大的图形操作库,您可以轻松地将其绑定到您的控件中。
  • Qt 还利用了平台的优势,例如抽屉、工作表以及将文件与 Mac OS X 中的窗口相关联。
  • @Kill KRT。这些控件看起来相当复杂,在任何框架中开发它们都不是一件容易的事。但是让它们跨平台的最好方法是使用 Qt。
  • 其实像Kill KRT这样链接的控件在WPF/Silverlight中很容易开发。它们只是很难在 Qt 中开发,因为 Qt 本身非常原始(没有 DataTemplates、有限的渲染模型等)。 Silverlight 是跨平台桌面 GUI 开发的绝佳选择。所以就 Kill KRT 而言,我认为 Silverlight 显然是比 Qt 更好的选择。
【解决方案2】:

我建议使用 Mono 和 GTK#。使用 .Net 开发应用程序比使用 C++ vanilla 更有效。当然,您必须坚持使用 C# 3.0 和 .Net 2.0(实现了 3.5 中的一些功能,例如 LINQ)。但它仍然为您提供了比 C++(例如 QT)更多的功能。

【讨论】:

  • 我知道...我也发现 C# 比 C++ 更高效,但是当我尝试创建一个 exotic 自定义控件(如带有动画图标的树视图)时,我发现很多性能问题,GDI+有限。所以我正在寻找一个让事情变得更简单和更快的库/框架。 GTK# 是这样吗?还是我最好选择 C++ 和 QT?
  • @Kill KRT:GTK 有很多 Qt 共享的灵活性,因为这两个工具包都来自一个真正没有本机小部件库的环境。然而,Qt 在很多方面都比 GTK 更容易扩展。
  • 我在使用 GDI+ 时没有遇到任何性能问题。如果您要使用动画图标或类似的东西,则需要双缓冲。然后它会像婴儿一样顺利;)
【解决方案3】:

使用 C# 提高生产力。没有反对 C++,但它有点冗长。 至于 GUI 库,我认为 WinForms 曾经在 Mono 上工作。或者,GTK#。

【讨论】:

    【解决方案4】:

    我不建议使用 wpf,因为它是一个依赖于平台的平台。 Silverlight 可能是一个更好的选择。

    但是,如果您正在开发 Web 应用程序,jquery 将是一个不错的选择,您也可以考虑使用 adobe flex 和 adobe air; http://www.adobe.com/products/air/

    【讨论】:

    • 不,我不是在开发 Web 应用程序,但感谢您的建议。我去看看 Air(它的名字听起来不错 ;-))
    • Adobe AIR 放弃了对 Linux 的支持,Microsoft Silverlight 现在基本上已经死了。 Adobe Flex 变成了Apache Flex
    【解决方案5】:

    多平台是否必须包含 iDevices?可以在网络上吗?这是你必须首先回答的 2 个问题。

    如果您可以在没有 iPad/iPhone 支持的情况下生活,那么 Flex/Flash/Air 是高度图形化事物的不错选择。它肯定是多平台的,并且很容易集成到网络中。由于给出的细节有限,这可能是您在这种情况下的最佳选择。

    Qt 也可以为您工作,尽管我不能确定它的图形库是否会使其变得容易。我个人从未使用过它,所以其他人必须回答这个问题。但由于它是在 C++ 中的,因此您也可以使用其他库。

    对于这种复杂的 GUI,Java Swing 对我来说听起来很粗糙。做一些基本的东西还不错,但如果你期待像 C# 这样的体验,我想你会感到沮丧。当然只是个人意见。

    最后,如果它可以是一个 Web 应用程序,为什么不坚持使用 C# 和 Silverlight? .NET 解决方案可能对您很有效,因为您已经在学习它。

    【讨论】:

    • 它不是一个 Web 应用程序,而且我不认为要与任何 iDevices 兼容......我想我会回到我的 Stephen Prata 的书并尝试 Qt! ;-)
    • 什么? Silverlight 不仅适用于 Web 应用程序。 Silverlight 也是桌面应用程序的绝佳平台。 Silverlight 应用程序可以在所有主要操作系统的浏览器中运行。您的回答似乎暗示 Silverlight 仅限于 Web 应用程序。也许您应该对其进行编辑,以明确指出 Silverlight 对于桌面应用程序也是一个不错的选择。
    • 即使在我自己反对 Silverlight 的建议中,我唯一的问题是渗透。如果他真的想要跨平台,那么如果他想吸引“普通”观众,他就会错失良机。根据 riastats,只有大约一半的 OSX 用户安装了它。昨天我问了 5 位 Mac 朋友,其中 0 位安装了它,甚至知道它是什么。同样的事情也适用于 Windows 7 或 Windows XP。我想这也取决于目标受众。与往常一样,我们可能需要更多信息。我并不是有意怀疑 Silverlight 的能力。
    • 也许我错了,但据我所知 Silverlight 仅在 Windows 和 Mac 上可用,在 Linux 上有一个“移植”(Moonlight)。我可以在 Silverlight 中开发一个应用程序并轻松移植到 Moonlight 吗?我也知道 Moonlinght 并没有完全涵盖所有 Silverlight 功能。最好的事情是在 Mac 和 Linux 上提供 WPF 框架!
    • @Awaken:是的,Silverlight 今天的渗透率只有 62%,但你知道一年前是 30% 左右吗?按照 Silverlight 的发展速度,它将在 2011 年底轻松赶上 Flash。另外请注意,Silverlight 的安装比 Flash 更快、更干净(没有烦人的额外步骤),可以想象你的一些 OSX 朋友安装了它,但没有意识到。但这一切都不重要,因为 Kill KRT 正在开发一个 桌面 应用程序 - 他可以简单地将 Silverlight 作为安装包的一部分并完成它。
    【解决方案6】:

    Silverlight 在 Windows/Mac/Linux 和一些手持设备上运行,并且正在移植到更多手持设备。我相信 Silverlight 最终会被移植到所有流行的设备上。

    银光是:

    1. 比 Flex/Flash/Air 强大得多。
    2. 比 Qt 强大得多。
    3. 比 GTK+ 或 GTK# 强大得多。
    4. 比 JOGL 强大得多。

    Silverlight 具有您要求的所有功能。

    Silverlight 与 C# 配合得非常好,C# 是一种比 C++ 更高效的语言。

    Silverlight 基本上是 WPF 的一个非常大的子集,所以如果您已经了解 WPF,那么您就已经了解 Silverlight。

    除非你绝对需要 iPhone/iPad 支持,否则我认为这个决定是显而易见的。

    请参阅this comparison of WPF and Cocoa 以了解 WPF/Silverlight 与 Qt、Flash/Flex/Air 和 GTK# 之类的比较,所有这些都使用类似于 WinForms 的原始对象模型可可。

    【讨论】:

    • 我不知道 Silverlight 也可以用来开发“桌面”应用程序。我的疑问是: - 性能(QT 与 Siverlight) - 可移植性(Moonlight 并未完全实现所有 Siverlight 功能) - Silverlight 与 WPF 有什么关系?我可以学习 WPF,然后轻松“切换”到 Silverlight 吗?
    • Silverlight 最初被称为“WPF/e”,表示“WPF Embedded”,是 WPF 的简化版本。最初它比 WPF 简单得多,但现在差距已大大缩小。第一个版本是纯网络版,但后来的版本允许 Silverlight 作为桌面应用程序运行。
    • Moonlight 实际上实现了每个 Silverlight 版本的 100%,并通过了 Microsoft 提供的 Silverlight 测试套件。 Moonlight 大约落后了 1 年,因此对于 Linux 的可移植性,通常只保留一个版本。
    • 学习 WPF 然后切换到 Silverlight 是一种极好的方法:许多人都非常成功地做到了这一点。在这里和那里你会发现缺少的东西,但所有的基本原理都是一样的。事实上,如果您不使用任何 WPF-only 功能,您的 WPF 应用程序实际上将在 Silverlight 中编译和运行而无需更改。不要花太多时间学习 FlowDocument 或 3D,因为它们尚未包含在 Silverlight 中,但几乎所有其他内容都包含。
    • 在大多数情况下,Qt 和 Silverlight 的性能相当。对于复杂的图形和动画,Silverlight 的显示将明显更快、更流畅。对于同时可见一万个小部件的窗口,Qt 的初始化速度会更快。除此之外,您不会看到两者之间有太大区别。
    【解决方案7】:

    在我的日常工作(一家著名的微处理器公司)中,我们使用 Java、Eclipse RCP 和 Java OpenGL 开发复杂的工程应用程序。性能很好——我们可以轻松获得数百万个多边形/秒和高达 100 帧/秒。 Eclipse 中的 SWT 小部件足够快,我们无需使用 JOGL 呈现任何自定义控件。

    我有一组教程展示了如何开始使用这种编程。系列以http://wadeawalker.wordpress.com/2010/10/09/tutorial-a-cross-platform-workbench-program-using-java-opengl-and-eclipse/开头。

    【讨论】:

      【解决方案8】:

      首先,不要将 C# 用于任何应该可移植的东西。对于 GUI,Mono 是一个糟糕的选择,原因有两个:

      1. Mono 总是落后于 .NET。
      2. Mono 不支持 WPF,因此开发 GUI 的唯一方法是使用 GTK# 之类的东西。

      我的个人意见 - 使用 C++。它会给你很好的便携性和独立性。

      你有两个选择:

      • Qt4 - 非常好的 GUI 工具包,使 GUI 开发变得非常容易,并且高度可移植。
      • GTKmm – 也是非常好的工具包,但在 Windows 上感觉不太自然。

      此外,Java 有随 JDK 一起提供的 Swing 工具包,可在所有 Java 平台上使用,甚至像 OpenVMS 这样非常奇怪的平台。

      【讨论】:

      • 有 Java Swing 性能问题吗?我应该使用 Java+OpenGL (JOGL) 来更快地渲染我的复杂控件吗?我想知道如何实现复杂的 GUI(如 Maya、Cubase、Adobe Premiere)!
      • @Kill KRT - 如果性能对您很重要,请使用带有 Qt 或 GTK 的 C++,不要使用 Java 或 C# 等语言,因为它们的性能很差。
      • 赞成。似乎许多 Java 和 C# 粉丝不喜欢听到他们不是跨平台的(Java 仅针对 Java 平台 - 即使使用 SWT)和用于 GUI 的 Mono,我同意这是一个笑话。我自己正在努力,用我自己的抽象层在本地平台工具包 Cocoa/MFC/GTK 中编写我所有的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多