代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

如果我使用qt for windows,我的应用程序在linux/mac/windows上运行得好吗?

  •  5
  • Sergio Tapia  · 技术社区  · 15 年前

    我觉得python在triforce中运行得很顺利。在windows下运行的程序将在linux下运行。这种看法正确吗?

    话虽如此,如果我在qt for windows中创建我的应用程序,它在linux/mac中也能完美运行吗?

    谢谢。

    6 回复  |  直到 15 年前
        1
  •  8
  •   Nicholas Knight    15 年前

    对。不,也许吧。参见:Java和“写入一次,运行任何地方”。

    文件系统布局,外部实用程序,任何你可能做的事情,如停靠图标,字符编码行为,这些和更多的领域,你可能会遇到一些麻烦。

    使用qt和python,并尽可能避免任何与windows特定库或行为相关的东西,这将使在mac和linux上运行应用程序更加容易,但是对于任何不重要的应用程序,第一次有人尝试时,它会 在他们面前爆炸。

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

        2
  •  5
  •   DJ Capelis    15 年前

    正如其他海报所提到的,关键问题是确保您永远不会接触不同的非qt非跨平台api。或者甚至是一个不同的非qt跨平台api,如果您使用qt,您可能需要对它进行承诺,它是一个全面的框架,在很大程度上,使用qt比使用其他任何东西都容易。由于程序中的基本原语在所有地方都以相同的方式工作,因此有一些很好的优点。(即,网络代码中的qstring将与接口代码中的qstring相同。)可移植性方面,如果您停留在qt为您提供的api中,它应该在多个平台上工作。

    在某些领域,您可能需要调用一些qt函数,这些函数提供特定的跨平台调整,对某些平台来说比其他平台更重要(例如dock图标),并且您不会立即在所有三个平台上都有一个完善的应用程序。但一般来说,您应该与在这三个应用程序上编译和运行的应用程序保持非常接近。(也可以尝试使用qmake或类似的构建系统,因为qt应用程序的构建过程因平台而异。不同的旗帜等)

    当您将qt与其他api(如opengl)混合使用时,会出现一些奇怪的问题,特别是windows锁定gl上下文的方式与os x和linux的不同,因此如果您打算将opengl用于多个线程,请尝试在其他平台上定期编译,以确保没有完全崩溃了。这也将很快指出您可能无意中使用了非跨平台系统api的领域。

    我和一个团队一起使用qt构建了一个多线程的3-d多人实时网络游戏(阅读:充分利用qt许多领域的非平凡应用程序),qt支持多平台的能力的有效性让我们大吃一惊。(我们在针对windows的os x上开发,我经常确保它仍然在linux上运行)我们只遇到了一些特定于平台的bug,几乎所有这些bug都是由于使用了opengl等非qtapi引起的。(这确实应该告诉你,opengl在使用跨平台方面比qt更困难。)

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

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

        3
  •  2
  •   Menda    15 年前

    对。使用qt编写的代码将在windows、mac、linux/x11、嵌入式linux、windows ce和symbian上运行,而不会有任何更改。 你可以拿一个 look here .

        4
  •  1
  •   elcuco    15 年前

    一般来说-只要你不使用qt类不包含的代码-是的。

    我有好几次只是在windows下重新编译了我在linux(64位)中编写的应用程序,而另一种方式则相反。每次都对我有用。

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

        5
  •  0
  •   Andrew McGregor    15 年前

    它可能运行得很好,但是需要一些测试,当然qt只处理gui的可移植性,而不处理其他可能导致可移植性问题的事情。

    qt应用程序通常不太适合macos,因为默认情况下它们没有applescript支持,也不一定有正确的键绑定。但如果你努力解决这些问题,它们会起作用,但效果并不好。在Mac上,构建一个本地用户界面要好得多。如果这是一个内部应用程序,qt可能可以,但如果它是在销售,你不会做很多销售,并会给自己造成一些支持的麻烦。

        6
  •  0
  •   smerlin    15 年前

    正如其他人所说,当您不使用qt的平台特定功能时,使用qt功能所做的一切都很可能运行得非常完美。

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

    仍然有一些事情不能用qt完成,所以你必须用普通的python自己完成… 是的,“python”本身是独立于平台的(它应该是独立的),但是还涉及到很多其他事情……主要是操作系统。 而操作系统的反应,显然你必须通过在所有目标操作系统上测试应用程序来找到答案。

    最近,我编写了一个非常简单的gui应用程序,虽然它在windows上运行得很好,但它并没有在linux上运行,因为在linux上,python解释用unicode编码的文件与在windows上不同。 另外,一个小脚本应该返回机器的主机名,它在windows上执行了这个操作,但在linux上只返回了“localhost”,这显然不是我想要的。