.NET或Mono vs Qt,哪一个用于跨平台开发?

时间:2009-02-07 16:24:38

标签: .net user-interface api qt

好的,这是雷区,但试图理解为什么人们会选择.NET(或等效的Mono)进行跨平台开发而不是其他工具包,如果没有两者的经验就很难。

对于可能同时使用两者的程序员,会遗漏或期望哪些功能?相反,一个人的用户在范例或其他方面会发现什么?对于任何一个工具包都有很多话要说,但是使用这两个工具包的人的评论很有价值。

以下是有关该主题的一些相关问题:

编辑:如果Windows是目标平台之一,那么使用Mono只会是一个可行的选择吗?

7 个答案:

答案 0 :(得分:7)

你会选择Mono(也许是C#)进行跨平台开发,原因与有人选择Java或Python的原因相同。这些语言在虚拟机上运行,​​如果您仔细选择库和设计代码,它将跨平台工作(无需重新编译)。本地语言(如C,C ++)确实有标准,因此语言在多个平台上是相同的,但您使用的编译器设置和库可能不是跨平台的(例如进程,网络等)。

除技术问题外,跨平台框架的熟悉程度可以节省时间。例如。学习GUI库可能需要数周/数月。如果API在所有目标上都相同,那么显然可以节省时间。

Qt4设计精良,文档齐全,附带一些实用的实用工具。 wxWidgets正在变得越来越庞大,有几十个小部件,其中一些你永远不会使用。 Qt的小部件更少,更灵活。我以前经常使用wx但是我现在是Qt转换器因为LGPL许可证,优秀的文档,设计器,PyQt,新的IDE以及不断增长的用户群。

Qt和wxWidgets都有Python绑定(即PyQt和wxPython),因此您可以使用这些库编写跨平台GUI代码。对于Mono而言,它更棘手,但有GTK#和Qyoto。我没有尝试过其中任何一种,但它们似乎已经达到了足够成熟的程度(例如参见MonoDevelop)。

答案 1 :(得分:5)

对于跨平台(和独特的平台),我会去Qt因为它比Mono和Windows.Forms更干净,并且使用MVC模式所有应用程序都更容易扩展和修改

答案 2 :(得分:4)

我正在使用Qt4进行跨平台开发,并对它非常满意。部署工作正常(至少如果您静态链接Qt,这根本不是很难),API 真的很好且一致,Qt Designer允许快速开发GUI部件,因此可以专注于真正的逻辑。信号和插槽概念在习惯之后也是我非常喜欢的。

根据我的经验,使用wxWidgets进行部署更加困难(在我的情况下,由于依赖于GTK而不是Mac,因此它特别是Linux)。

答案 3 :(得分:1)

也许您可以在便携式语言/框架中编写大部分应用程序,并为您计划支持的每个操作系统编写单独的“图形界面皮肤”?当然,这种策略在某些情况下可能会运作良好,但在许多其他情况下可能会失败。

答案 4 :(得分:1)

这是另一个你没有提及的选项,我没有注意到这里提到,但是Lazarus是跨平台的,并且随着它向前发展而变得越来越成熟。当然,就像用Qt编写的东西一样,你必须为特定平台编译它。就我而言,我在一个在Mac OSX,Linux和Windows上运行的项目中成功使用了Lazarus。 Lazarus是一个很好的RAD工具,Object Pascal适用于我编写的大多数事情。 Lazarus是应用程序速度的不错选择。它与用c / c ++编写的软件相当。我不打算支持这一点,有案例研究,如果你需要,你可以自己进行测试。

我对使用MonoDevelop进行c#编码的印象一直是库,特别是html和音频有点挑战。我只玩了几个月的c#/ MonoDevelop,所以我对整个套件还是很新的。我猜想有一些速度价格需要支付,因为它是托管代码。同样,我认为研究表明,仅编译代码通常比c#/ .NET代码具有速度优势。

当然另一种选择是Java。我没有做那么多,但它肯定是无用的,并且确实运行良好,我希望Java代码比仅编译代码慢,例如c / c ++ / Pascal。

我想到的另一个选项包括三个主要平台的编译器Eiffel。这些天我没有做太多的事情,但是当我玩它时我喜欢它。 YMMV

答案 5 :(得分:0)

你考虑过wxWidgets吗?它也是跨平台,像QT这样的C ++并且使用与QT不同的本机控件,并且不需要像.NET一样运行任何框架。

.NET和mono几乎是一回事。如果您编写简单的基于用户的应用程序而没有太多系统或网络编程,那么.NET应该是最好的。

如果性能是应用程序的关键方面很多人使用QT,wxWidgets等C ++库。

答案 6 :(得分:-2)

.NET不适用于跨平台。编写代码并使其有效地用于MONO和.NET是非常痛苦的。个人使用.NET而不是TCL / Tk或Qt或Java Swing的原因是快速应用程序开发。

对于存在的任何其他框架,RAD几乎是不可能的。 RAD在简单的情况下是可能的,但是你最后一次编写具有简单用例的基于业务的应用程序是什么时候。

GUI工具包一般很难使用,因为您需要了解基础知识。基础是数据绑定,剪切,刷新,布局管理器和事件处理。所有这些概念对于普通开发人员来说都很难。原因在于大部分都是用更多现代工具包抽出来的。例如,使用Java Swing,我不需要知道有关剪辑或刷新的任何信息,因为它们对我来说“神奇地”。在某些事情没有神奇地刷新的情况下会发生什么,那种情况则提供了几乎不可能的解决方案。然后代码变得指数级复杂。

.NET通常被许多UI开发人员使用,因为扩展它非常简单。创建扩展方法以扩展控件非常容易。使用.NET实体框架创建绑定数据的方法甚至更简单。但是使用这个RAD工具需要付出代价,那就是它不是平台独立的。