2010-01-09 100 views

回答

8

是的。不,也许。另请参阅:Java和“一次写入,随处运行”。

文件系统布局,外部实用程序,任何你可能做的事情如停靠图标,字符编码行为,这些等等都是你可能遇到麻烦的地方。

使用Qt和Python,尽可能避免与Windows特定的库或行为紧密相关的任何事情都会使Mac和Linux上的应用程序更容易运行,但对于任何不平凡的应用程序,第一次尝试它,它炸毁在他们的脸上。

但是,通过认真选择框架和库,使应用程序跨平台工作将比传统的“移植”更像bug修复。

2

是的。您使用Qt编写的代码可以在Windows,Mac,Linux/X11,嵌入式Linux,Windows CE和Symbian上无任何更改。 你可以拿一个look here

0

它可能运行良好,但需要进行一些测试,当然Qt只处理GUI的可移植性,而不是其他许多可能导致可移植性问题的事情。

Qt应用程序在MacOS上通常不太适合,因为它们默认不支持AppleScript,并且不一定具有正确的键盘绑定。但是,如果你做这些工作来解决这些问题,那么他们会工作,但不是很好。在Mac上,建立本地用户界面要好得多。如果这是一个内部应用程序,Qt可能是好的,但如果它是用于销售的话,你不会做出很多销售并且会造成一些支持麻烦。

+2

这是*绝对*不正确。 Qt不仅仅是一个跨平台的GUI库,在回答关于它的问题之前,你显然需要做更多的研究。它提供了从跨平台文件系统调用到跨平台高级数据结构到跨平台网络到跨平台可嵌入浏览器组件的所有内容。 – 2010-01-11 07:52:26

1

通常 - 只要你不使用Qt类未涉及的代码 - 是的。

我有好几次刚刚重新编译的应用程序,我在Linux下(64位)在Windows下编写的,另一种方式是周围的。它每次都适合我。

取决于您的需求,您可能还会发现编译器问题,但我相信您会知道如何解决它们。其他人提到你应该寻找的一些问题,只需阅读问题中的其他帖子。

0

正如其他人所说,使用Qt-Functionality完成的任何事情都很可能非常完美地运行,当您不使用qt的平台特定功能时。

没有那么多(大部分与窗口管理器的东西有关),但有些事情可能不适用于其他系统。但在Qt的文档中肯定会提到这样的东西。

还有一些东西不能用Qt来完成,所以你必须用普通的Python来做这件事...... 是的“Python”本身是平台无关的(它应该),但是有很多其他事情涉及......主要是操作系统。 操作系统如何反应你将明确地通过在所有目标操作系统上测试应用程序来找出自己。

最近我写了一个非常简单的GUI应用程序,而它跑flawlessy在Windows上,它并没有在Linux上运行,因为在Linux上的Python解释为Unicode不同于在Windows编码的文件。 另外,一个应该返回机器主机名的小脚本,它在Windows上做的只是在Linux上返回“localhost”,这显然不是我想要的。

5

正如其他海报所说,问题的关键是确保你从来没有接触不同的非Qt的非跨平台的API。或者甚至是一个不同的非Qt跨平台API,如果你使用Qt,你需要对它做出承诺,这是一个全面的框架,并且大多数情况下坚持使用Qt比去其他任何事情都容易。有一些很好的优点,因为程序中的基本原语在各处都以相同的方式工作。 (即网络代码中的QString将与接口代码中的QString相同)。可移植性方面,如果您保留在Qt为您提供的API中,它应该可以在多个平台上工作。

有些地方可能需要调用某些Qt函数,这些函数提供了对某些平台比其他平台更重要的特定跨平台调整(例如停靠图标),并且您不会立即在所有三个平台上都有抛光应用程序。但总的来说,您应该保持与编译和运行这三个应用程序的应用程序非常接近。 (尝试使用qmake或类似的构建系统,因为Qt应用程序的构建过程因平台而异,不同的标志等)

当您将Qt与其他API混合使用时会出现一些奇怪的问题OpenGL,尤其是Windows锁GL的方式与OS X和Linux的方式不同,所以如果你打算在多线程中使用OpenGL,可以尝试在其他平台上定期编译,以确保没有任何东西被完全破坏。这也将很快指出您可能无意中使用了非跨平台系统API的领域。

我已经使用Qt与一个团队构建了一个多线程的三维多人实时网络游戏(阅读:充分利用Qt许多领域的非平凡应用程序),我们只是被吹走了通过Qt支持多种平台的能力的有效性。 (我们在OS X上开发了针对Windows的操作系统,并且我经常确定它仍然在Linux上运行。)我们只遇到了一些特定于平台的错误,几乎所有这些错误都来自使用非Qt API(如OpenGL)。 (这应该真的告诉你一些事情,那就是OpenGL更像是一个使用跨平台而不是Qt的斗争。)

在经历的最后,我们很高兴看到我们花费很少的时间来处理平台特定错误。令人惊讶的是,由于团队实际上并没有将它用作通过该项目的主要开发平台,所以我们可以如何很好地制作用于Windows的GUI应用程序。

但做测试及早并经常。我不认为你编写整个应用程序然后测试的方法是一个好主意。这可能与Qt,但不太可能,如果你没有经验编写便携式代码和/或是Qt的新手。

相关问题