C++/Qt vs Adob​​e AIR [关闭]

Posted

技术标签:

【中文标题】C++/Qt vs Adob​​e AIR [关闭]【英文标题】:C++/Qt vs Adobe AIR [closed] 【发布时间】:2010-09-23 22:17:00 【问题描述】:

我必须为我们的产品选择一个平台。我必须在 Qt 框架和 Adob​​e 的 AIR 之间做出决定。由于过去两年的工作,我精通 Qt。我查看了 Adob​​e 的网站,但所有关于 flex、flash、html/ActionScript 编码能力的信息都令人难以理解。我无法理解以下有关 Adob​​e 生态系统的内容。

我有以下关于 Adob​​e AIR 的问题:

    我使用什么语言来编写我的应用程序? (不仅仅是定义 UI 的外观) 就像在 Qt 中一样,我使用 C++。是动作脚本吗?

    我们可以说 AIR 仅用于为应用制作 UI。

    实用程序类和 AIR 的文档在哪里? 例如http://qt-project.org/doc/ 用于 Qt

    Qt 附带了大量可以使用的预制小部件。 Adobe 是否附带任何此类小部件集?如果有,我可以在哪里看到它,就像在 url 中一样?

    我了解 flex SDK 是开源的。我可以制作商业应用程序并发布它们吗? flex SDK 是否提供所有内容(编译器、实用程序类/小部件)

    AIR 在许可方面的成本是多少?

    AIR中是否有相当于QT的QGraphicsView的东西?

【问题讨论】:

【参考方案1】:

如果您需要访问大量本机库,则需要留在您的 QT 环境中。请记住,AIR 是单线程的,并且在 Flash Player 上运行(最初是为基于帧的动画设计的。) 但是,根据您正在构建的应用程序的风格,AIR 可能适合您。

请注意,AIR 可能会让人感到困惑,因为创建 AIR 应用程序有几种不同的开发者路径:1) 使用 html/javascript 和 AIR SDK,2) 使用 Flash/Actionscript 和 3) 使用 Flex SDK 和/或 Flex builder。就传统桌面开发背景而言,最后一个是最有能力的。

用于连接到 Web 服务的 Web 2.0 小型应用程序非常适合 AIR 应用程序。像 IM 客户端 Digsby 这样的东西会很棒。到目前为止,我最喜欢的 AIR 应用程序是 Basamiq Mockups。其他有用的应用程序是 TweetDeck。这些是非常适合使用 AIR 解决的问题类型的很好示例。

您应该访问 Adob​​e Showcase 并查看一些应用程序:http://www.adobe.com/products/air/showcase/

另外,如果你只是想摆脱 C++ 游戏,我相信 QT 现在有一些 java 绑定......我还记得一些 python 绑定,但我自己从来没有看过那些。

就 QGraphicsView 而言,人们在 Flex 中也做过类似的事情。我现在尝试谷歌搜索,但最初找不到它们,但人们拍摄了一张大图像,然后只在窗口中显示了当前区域。此外,在 Flex 的下一版本中,他们正在构建一个官方的 ViewPort 组件:http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Viewport

【讨论】:

谢谢。我们正在为孩子们制作一些可视化编程语言。我们需要一个漂亮的 GUI。我认为最好还是坚持 QT 并使用 SVG 来获得观感。【参考方案2】:

花一些时间在这个 AIR 应用程序上,然后问问自己是否值得花时间来掌握 Adob​​e Flex 和 AIR(准备好问问自己为什么不存在类似 C++/QT 之类的东西):

Tour de Flex

Tour de Flex 是一款桌面应用程序 用于探索 Flex 功能和 资源,包括核心 Flex 组件、Adobe AIR 和数据 集成,以及各种 第三方组件,效果, 皮肤等等。

您的一些问题:

Flex 可以用 MXML 和 动作脚本 3。空气额外 支持 HTML/DOM/JavaScript 编程为 webkit 内置 HTML 渲染引擎 AIR 运行时。 MXML 是一种 XML 声明性 DSL,它 被编译成 ActionScript3 命令式代码。相当不错, 但是,对于声明式编码 UI 的图形形式(即 MVC 模式的视图)。 ActionScript3 的遗产是 建立在 JavaScript 之上,但它有 被修饰到了更多的地步 类似于 Java 或 C#。它有包 命名空间、类和接口 带继承,类成员 访问保护关键字, 构造函数、静态成员和 对 Java 的一些非常好的补充: 属性、事件、数据绑定、 和关闭。

Flex 风格的编程也是一种依赖异步 I/O 交互的单线程模型。这是一个比多线程 Java Swing 或 C# .NET Winform 应用程序更简单的编程模型,但允许实现相同的程序行为最终结果。我在这里详细说明:

Flex Async I/O vs Java and C# Explicit Threading

【讨论】:

确实,Qt 的组件比 Flash 差。我不知道为什么会这样。【参考方案3】:

Flex 是开源的,您可以免费下载 SDK,没有与之相关的许可费用。 (见他们的FAQ)

他们确实提供了一个“flex builder”,我认为这是一些自定义的 Eclipse,而且需要花钱,但没有它你也可以完美地工作。

可以在adobe's livedoc pages 找到这些文档。 (to some 本身就是不喜欢 Adob​​e 的充分理由;))

我确实想知道,如果您精通 QT,为什么还要考虑其他事情?与 QT 相比,您希望 AIR 给您带来哪些优势?

我对 QT 和 Flex 都有一些经验,但还不足以衡量两者之间的关系。我确实知道 QT/C++ 比 Flex/ActionScript 成熟得多。

如果您已经了解 QT,我认为花时间学习新框架(和编程语言)不会让您获得足够的诚实...

【讨论】:

“我想知道,如果你精通 QT,为什么还要考虑其他东西?你认为 AIR 比 QT 能给你带来哪些优势?”是否可以仅使用作为 OSS 的 flex SDK 并免费发布商业应用程序? 啊,是的,QT 为商业应用花钱,好点 :) 这不是很贵,但是他们不再在他们的公共网站上公布实际价格 (trolltech.com/products/appdev/pricing) 我必须评估并向管理层发送有关 AIR 与 Qt 的报告。 :-) 现在 Qt 可免费用于商业应用。因为由于 Qt4.5 是根据 LGPL 条款发布的【参考方案4】:

我使用过 QT 和 Flex(虽然不是 Air 本身),并且发现 Flex 可以更快地启动和运行应用程序以及进行修改,而 QT 为您提供更多控制权——尤其是在安装程序中。 Air 应用程序安装程序相当笨拙,或者至少在我尝试时是这样,尽管从那时起它可能已经改进了。

Air 的一大优势在于它的大部分代码可以在网页内的 Flash 中运行。出于安全原因,您无法从 Web 访问本地文件系统等,但几乎所有其他内容都是可移植的。

【讨论】:

【参考方案5】:

我做了相反的动作。我开始研究 Adob​​e 的东西,然后转到 QT。这样做的主要原因是关于 Adob​​e 框架的限制。当你使用 Adob​​e 的东西时,你受限于他们生产的工具,如果不能用 Adob​​e 的东西做你想做的事情,就很难引入外部框架或库。通常,解决方案是使用套接字,它在客户端-服务器架构上转换假定的“独立”应用程序。此外,如果您使用许多外部的东西,可能很难管理这么多不同的客户端。 使用 QT,您可以使用 C++ 编写代码并添加您想要的任何外部框架或库。尽管如此,有时编码它并不容易,它是可行的并且没有“奇怪”的系统架构。

【讨论】:

【参考方案6】:

如果您正在寻找一些使用 Qt 和 SVG 的“有趣”用户界面示例,请查看 KDEGames [1][2] 和 KDEEdu [3][4] 项目。那里有很多很好的代码,它们使用 QGraphicsView 和 SVG 来创建可扩展的界面。当然请注意,这是 GPL,因此如果您的应用不是 GPL,请注意“借用”的内容。

[1]http://games.kde.org/

[2]http://websvn.kde.org/trunk/KDE/kdegames/

[3]http://edu.kde.org/

[4]http://websvn.kde.org/trunk/KDE/kdeedu/

【讨论】:

【参考方案7】:

我将支持@Pieter 的评论 - 如果您已经了解 QT,那么迁移到一个全新的环境将需要更长的时间。

QT 具有跨平台的优势,并且非常成熟:有适用于 Windows、Linux 和 Mac OS X 的库。我对 AIR 不是很熟悉,只知道它来自 Adob​​e,但产品网站似乎表明它适用于富互联网应用程序 (http://www.adobe.com/products/air/)。如果这是真的,那么如果您正在开发桌面应用程序,QT 将是更好的选择。

【讨论】:

以上是关于C++/Qt vs Adob​​e AIR [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

adobe air vs flex vs flash builder ---我需要解释一下

在 ActionScript 3.0 中以编程方式检测 Adob​​e Air 和 Adob​​e Flex

多次启动 Adob​​e AIR 应用程序

将 Flex 转换为 Adob​​e Air

使用 Adob​​e AIR 构建插件架构

带有嗅探器代理的 Adob​​e Air?