【问题标题】:.NET or Mono vs Qt, which one for cross-platform development?.NET 还是 Mono vs Qt,哪一个适合跨平台开发?
【发布时间】:2010-10-06 03:51:44
【问题描述】:

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

对于可能同时使用这两种方法的程序员,哪些功能会被遗漏或想要?相反,在范式或其他方面,一个用户会发现另一个用户缺少什么?这两个工具包都有很多话要说,但是来自使用过这两个工具包的人的 cmets 会很有价值。

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

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

【问题讨论】:

  • 至于你的最后一个问题,是的,如果你决定走这条路,你可以简单地定位 Mono,虽然它需要你的用户安装 Mono,而 .NET Framework 安装在较新的版本上窗户。

标签: .net user-interface api qt


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    Qt4 设计精良,文档齐全,并附带了一些有用、可靠的工具。 wxWidgets 变得越来越庞大,有几十个小部件,其中一些你永远不会使用。 Qt 的小部件更少,更灵活。我以前经常使用 wx,但由于 LGPL 许可证、良好的文档、设计师、PyQt、新的 IDE 和不断增长的用户群,我现在是 Qt 转换者。

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

    【讨论】:

    • Qt 绑定的语言比我想列举的要多
    • 已经有一段时间了,但这个答案似乎是最有用的。
    • 我可以使用 Qt 社区版来创建用于商业目的的商业(专有)应用程序吗?
    【解决方案3】:

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

    根据我的经验,使用 wxWidgets 部署更难(在我的情况下,由于依赖于 GTK,它专门用于 Linux,不知道 Mac)。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 在 Qt 的情况下,即使是“皮肤”也可以与应用程序一起编写。该框架确保“皮肤”具有原生外观。
      【解决方案5】:

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

      【讨论】:

      • 第二!欢迎任何关于差异的细节或扩展。
      • Qt 不像 .net 那样倾向于单一平台,.net 包含许多组织不良的特定于 Windows 的库
      【解决方案6】:

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

      RAD 几乎不可能与现有的任何其他框架一起使用。 RAD 可以用于简单的案例,但是您最后一次编写具有简单用例的基于业务的应用程序是什么时候。

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

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

      【讨论】:

      • 能否详细说明“痛苦”?
      • @EricSchaefer:我怀疑 .NET 和 Mono 之间的差异使得它如此。
      • 我不知道,这是有争议的。 Qt 是非常该死的 RAD。
      • 同意,QT IMO 接近 RAD 作为 .NET,实际上是真正的跨平台,并且是原生的,并且在其自身之外没有依赖关系,如果需要可以静态链接。
      • -1:为什么用 Qt 做 RAD “几乎不可能”?它有一个设计师,使用 PyQt 你可以很快地制作原型。
      【解决方案7】:

      你考虑过 wxWidgets。它也是跨平台的,类似 QT 的 C++ 并且使用不同于 QT 的原生控件,并且不需要任何框架来像 .NET 那样运行。

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

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

      【讨论】:

      • 这个答案对你有用吗:stackoverflow.com/questions/464463/…
      • 如何在我的商业应用程序中使用 LGPL QT ???我只使用经过长时间研究后选择的 wxWidgets。它的快速、原生控件、C++、多平台。 stackoverflow.com/questions/464463/…
      • 动态链接 LGPL Qt 库。这符合 LGPL 的要求。当然,仅仅为了使用另一个库而重写现有的代码库可能并不值得。有时确实如此。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多