JavaFX 2.0和Qt用于跨平台应用程序

时间:2012-09-26 03:55:38

标签: java c++ qt cross-platform javafx-2

我需要一些处理跨平台应用程序(特别是带有GUI的程序)的开发人员的建议。

我将很快创建一个需要跨平台的应用程序,因此我对两个不同的框架进行了一些初步研究:JavaFX 2.0和Qt。

老实说,两者都不仅仅满足我的需求。那么我问自己为什么我会选择一个而不是另一个(SPOILER ALERT:我不知道答案:P)。我知道JavaFX 2.0是相当新的(截至2012年)并且不是跨平台完全支持,但它最终会得到支持。

我提出的问题是:您将哪一个用于跨平台应用程序,以及您在做出决定时看到的标准是什么?

感谢您抽出宝贵时间阅读本文! :)

修改 在考虑这个问题时供您参考,我将要编写的应用程序涉及读/写XML文件,显示图像以及创建一些具有自定义功能的小部件。我在C#中使用.NET编写了类似的应用程序,但是在考虑JavaFX 2.0或Qt以实现跨平台可用性时会提出建议。

再次感谢! :)

5 个答案:

答案 0 :(得分:19)

这是一个老问题:稳定性与前沿性。我会尝试根据您的应用程序功能为您提供一些个人见解。

  

JavaFX 2.0相当新(截至2012年),跨平台不完全支持

嗯,它完全支持Linux,Windows和Mac。我可以这么说,因为我正在Mac上开发一个JavaFX 2.2应用程序,服务器在Linux机器上运行,而Windows机器上的客户机运行。

  

读取/写入XML文件

我还没有看到一些工具/界面比sax2更好/更容易/更快地解析XML。当然QtXMLPatterns模块解析器保护者尊重,但他们甚至开发了一个基于SAX2的XML解析器(顺便说一下,这个解析器并不完整,并且与传统的SAX1方法不完全兼容)所以我会说添加JavaFX 2得分。

  

显示图像

这两种技术都可以轻松地显示图像,但JavaFX 2.2缺少一些图像处理(特殊格式编解码器)的工具。如果图像处理是一个关键问题,我会说Qt在战斗中略微领先。

  

使用自定义功能创建一些小部件。

截至目前,这在JavaFX 2中并不是一项容易的任务,因为Stage对象没有像ALWAYS_ON_TOP这样的选项,直到3.0(2013年的某个地方)才会有这样的事情。这不是一件难事,但是Qt已经有了一些不错的选择用于定制/显示/处理小部件的工具,我们根本无法在JavaFX中重现。

  

您将使用哪一个用于跨平台应用程序,以及您在做出决定时看到的标准是什么?

嗯,JavaFX 2.2是由Java构建的。我个人觉得使用Java编程比C ++更好更容易。你永远不必在java中使用指针,你总是可以依靠垃圾收集器进行内存管理,网上有很多教程和文档(我相信它超过了C ++)和一个不断发展的Java Gurus社区。

抽象地说,我选择了JavaFX 2.2,因为它很漂亮,因为它很酷,因为我可以更轻松地处理MVC,因为我喜欢Java,但我相信如果你的应用程序的小部件是你的,你应该去Qt它的主要目的。

我希望它有所帮助,欢呼

答案 1 :(得分:12)

我目前正在研究适合开发离线html5创作应用程序的各种跨平台框架。除了跨平台操作(Windows,Linux,OS-X),我的应用程序也有以下主要要求:

嵌入式数据库 嵌入式(或其次,主流浏览器)HTML5渲染引擎 功能强大的可编辑DND树,拆分器面板和富文本编辑器小部件 中型图像处理 USB记忆棒便携性

我仔细研究过这些框架:

jQuery(JavaScript),HTML5,CSS3 Google Web Toolkit [GWT](Java到JavaScript) JavaFX 2.0(Java) QT(C ++(Java绑定可用)) Xulrunner(XML,JavaScript) GTK +(C) Adobe Air 睡衣

我在所有这些技术的书籍上花了不少钱,我开始编写原型,看看每个框架能带我多快和多远。

最初,JavaFX 2.0以最快的速度把我带到了最远的地方。对此的简单解释是,使用JavaFX,所有工具,IDE,库,文档,代码示例,周转,调试,社区支持,制造商(Oracle)支持和学习曲线都与最少量的阻抗不匹配结合在一起。 / p>

JavaFX最大的胜利可能是它易于实现客户端嵌入式数据库(Derby)。对于所有其他框架,令人惊讶的是,这项任务更加困难和“笨拙”。

不幸的是,当我发现WebView小部件不从本地file:// URL执行JavaScript时,我遇到了严重的JavaFX绊脚石。 QtWebKit,GTKWebKit,Safari和Opera(所有基于WebKit)也展示了相同的文件:// JavaScript阻止行为(但Chrome没有),所以我猜测这是一个默认的WebKit安全措施。

当时,我认为文件:// JavaScript问题是一个JavaFX showstopper所以我继续开发jQuery,GWT和Xulrunner原型。结果,我的原型制作生产率急剧下降。与其他框架相比,Frankensteining和阻抗不匹配明显比JavaFX差。

这么多,以至于经过几个星期在杂草中徘徊,我回到了我的JavaFX原型,非常积极地找到一个解决方案。我最终通过在原型中嵌入Java SE 6的Web服务器,并通过以下列格式加载JavaFX WebEngine URL来连接到本地文件:“http:// localhost:58357 / xxxxx.html”解锁JavaFX原型以这种方式就像回家一样。这是一种真正的新鲜空气,更不用说大的,大的生产力助推器了。

根据这些经验,以下是一些可能对JavaFX与Qt辩论有所帮助的见解。

  • 我同意JavaFX与Qt的问题,因为这两个框架分别最终成为我的 #1和#2最喜欢,最有成效的选择。
  • 那就是说,我将jQuery / HTML5 / CSS3框架添加到组合中。这个 框架是如此强大,充满了x平台的潜力 应用程序开发,我甚至可以说它是 不可避免的。在我广泛搜索小部件控件时, 领先的可编辑DND树,分割器面板和丰富的候选者 文本wysiwyg编辑器小部件原来是开源的jQuery 插件。一旦你绕过本地file:// issue, jQuery / HTML5 / CSS3与JavaFX WebView很好地兼容 小部件。 jQuery / HTML5 / CSS3不足的一个领域是 客户端数据库存储。这是JavaFX的组合 事实证明,jQuery / HTML5 / CSS3框架非常强大。
  • 即使它们是用C ++编写的,Qt模块也有Java和 JavaScript语言包装器意味着开发人员不需要知道或使用 C ++才能使用Qt。
  • 这表明它不一定是JavaFX vs Qt, 无论是问题还是问题。事实上,更具建设性和回报 问题很可能是,“JavaFX AND Qt?”
  • 这提出了另一个重点:我很快发现了我的 最好的跨平台应用程序开发框架实际上是一个 JavaFX 2的混合体,直接的Java SE,Swing(用于传统的自定义) widget),WebKit和jQuery / HTML5 / CSS3。在路上,GWT, 相关的第三方GWT库和Qt模块可以 可能加入混合。这里的重点是使用单一的计划, 基因纯粹的框架很快就消失了。
  • 目前,一个共同的线程绑定整个混合 框架在一起是普通的Java SE。而且因为JavaFX 2是 在Java SE上构建,我的投票是从JavaFX 2开始,然后添加Swing, WebKit,jQuery / HTML5 / CSS3,GWT和Qt根据需要。
  • 最后,这篇文章帮助说服我跳上JavaFX旅行车。 http://fxexperience.com/2012/04/interview-with-peter-zhelezniakov/

- ħ

答案 2 :(得分:7)

我从时间戳看到的是,4个月之前我报道我选择了JavaFX2而非QT用于我的原型研究项目。大约2个月前,我开始从JavaFX2切换到QT,从那时起就没有回头了。争论的主要内容是从原型设计过渡到生产阶段。为了编写生产代码,QT被证明比JavaFX2领先一步。

与往常一样,魔鬼在细节中,它是一堆产生重大影响的小东西。使用JavaFX2,我经常面对并解决诸如无法控制的分割窗格调整大小行为,有限的树控制和有限的WebKit API访问(例如尝试实现浏览器缩放按钮,或将整个网页保存到本地html文件)这样的小事情 - 可行但比它应该的100X笨重)。当加在一起时,这些“次要”的解决方案会使进度停滞不前。

有了QT,这样的障碍就会少得多,因此,从原型到产品的过渡是自然的,无缝的,并且数量级更快。

在不利方面,使用QT进入“Hello World”需要更长的时间。但是,一旦到达那里,生产力就会迅速超越并远远超过JavaFX2。其中一个原因是QT文档,示例程序和开发人员社区更加广泛。 QT自1992年以来一直存在,自2011年以来一直存在JavaFX2,这种年龄差异对两个GUI框架的成熟度水平产生了重大影响。

至于Java与C ++的问题,一直没有问题。两者都是很棒的语言。就个人而言,出于各种效率,生产力和性能原因,我发现C ++是优秀的GUI语言,但这又是个人的结论。

答案 3 :(得分:1)

来自.NET / C#,您还应该将Real Studio视为创建跨平台应用程序的一种方式。它肯定符合您对要创建的内容的要求,并且比JavaFX或Qt简单得多。

答案 4 :(得分:0)

我认为Qt的最好和最令人愉快的部分是它的信号插槽,尤其是在处理线程时,它非常容易。