使用复杂的GUI编写跨平台应用程序

我想开发一个具有复杂GUI的应用程序(带动画的combobox,带样条的图表,透明层……)。 我对C#2.0有很好的经验,而且我正在学习WPF,但我读到了,遗憾的是,没有计划将WPF移植到Mono。

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

  • 我可以使用Java(使用JOGL) ,但我不熟悉它,而且我不了解性能问题。

  • 最后一个选项是C ++ ,但我必须做一个大的修订 (自上次使用它以来的几年),我发现很难用C ++开发GUI和便携式应用程序。 (也许我错了!不过,我很害怕用这种语言开发这么复杂的应用程序。)

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

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

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

转到C#以提高工作效率。 没有什么可以反对C ++,但它有点冗长。 对于GUI库,我认为WinForms曾经在Mono上工作。 或者,GTK#。

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

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

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

如果你可以没有iPad / iPhone支持,那么Flex / Flash / Air是高度图形化的好东西。 它是一个多平台,可以确保并轻松地集成到Web上。 对于这种情况,可能是您提供有限细节的最佳选择。

Qt也适合你,虽然我不能确定它的图形库是否会让它变得简单。 我个人从未使用它,所以其他人必须回答这个问题。 但由于它是在C ++中,您也可以使用其他库。

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

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

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

Silverlight是:

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

Silverlight具有您要求的所有function。

Silverlight与C#配合得很好,C#比C ++更有效。

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

除非您绝对需要iPhone / iPad支持,否则我认为这个决定非常明显。

看看WPF和Cocoa的这种比较,以了解WPF / Silverlight与Qt,Flash / Flex / Air和GTK#之类的比较,所有这些都使用类似于原型类似于WinForms的对象模型。cocoa。

在我的日常工作(一家知名的微处理器公司),我们使用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/开头。

首先,不要将C#用于任何便携的东西。 对于GUI来说,Mono是一个糟糕的选择,原因有两个:

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

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

你有两个选择:

  • Qt4 – 非常好的GUI工具包,使GUI开发变得非常简单,并且非常便于携带。
  • GTKmm – 也是非常好的工具包,但在Windows上感觉不太自然。

此外,Java还提供了JDK附带的Swing工具包,可以在所有Java平台上使用,甚至是像OpenVMS这样非常奇怪的平台。