如果我使用QT For Windows,我的应用程序在Linux / Mac / Windows上运行得很好吗?

时间:2010-01-09 22:40:27

标签: python qt cross-platform

我受到Python在Triforce中顺利运行的印象。在Windows中运行的程序将在Linux中运行。这种情绪是否正确?

话虽如此,如果我在QT For Windows中创建我的应用程序,它是否会在Linux / Mac中运行完美?

感谢。

6 个答案:

答案 0 :(得分:8)

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

文件系统布局,外部实用程序,您可能对停靠图标,字符编码行为等所做的任何事情,以及更多可能会遇到麻烦的区域。

使用Qt和Python,并尽可能地避免任何与Windows特定的库或行为相关的内容将使得在Mac和Linux上运行应用程序变得更加容易,但对于任何非平凡的应用程序,第一次有人尝试它时,在他们脸上爆炸。

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

答案 1 :(得分: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来构建一个多线程的3-d多人实时网络游戏(阅读:充分利用Qt的许多领域的非平凡应用程序)我们只是被吹走了Qt支持多平台的能力的有效性。 (我们在针对Windows的OS X上开发,我经常确保它仍然在Linux上运行。)我们只遇到了一些特定于平台的错误,几乎所有这些错误都源于使用非Qt API(如OpenGL)。 (这应该告诉你一些事情,OpenGL比使用Qt更难以使用跨平台。)

在体验结束时,我们很高兴我们需要花费很少的时间来处理特定于平台的错误。令人惊讶的是,我们能够为Windows制作一个GUI应用程序,几乎没有一个团队实际上通过该项目将其用作主要开发平台。

但要经常进行早期测试。我不认为你编写整个应用程序然后测试的方法是个好主意。使用Qt是可能的,但如果您没有编写可移植代码的经验和/或不熟悉Qt,则不太可能。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

通常 - 只要您不使用Qt类未涵盖的代码 - 是的。

我有几次在Windows下用Linux(64位)编写的重新编译的应用程序,反之亦然。它每次都适合我。

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

答案 4 :(得分:0)

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

Qt应用程序通常不适合MacOS,因为默认情况下它们没有Applescript支持,并且不一定具有正确的键绑定。但是,如果你做的工作来解决这些问题,他们的工作,但不是很好。在Mac上,构建本机UI要好得多。如果这是一个内部应用程序,Qt可能没问题,但如果它是出售,你将不会做很多销售,并会给你自己创造一些支持麻烦。

答案 5 :(得分:0)

正如其他人所说,当你不使用qt的平台特定功能时,使用Qt-Functionality完成的一切很可能会完美运行。

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

仍然有些事情无法使用Qt完成,所以你必须自己使用普通的Python ... 是的“Python”本身是独立于平台的(它应该是),但还有很多其他的东西......主要是操作系统。 操作系统如何做出反应显然必须通过在所有目标操作系统上测试应用程序来找到自己。

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