Qt是如何工作的(具体来说)?
当你用Qt写一个应用程序时,这个程序能不能直接在不同的操作系统上运行?还有(如果我说错了请纠正我),你不需要在所有想要运行这个应用的地方都安装Qt,对吧?
这到底是怎么回事呢?Qt是直接编译成目标平台的,还是说它会打包一些“dll”(库文件)呢?这和编写一个可以跨平台运行的Java应用程序有什么不同吗?
如果你用Python写了一个带有Qt的应用程序,最终用户需要安装Python吗?
3 个回答
问题在于你对“安装”的定义。要让Qt正常工作,程序只需要能访问到合适的库文件。
当然,不同的平台需要制作不同的程序和库文件(具体可以参考Qt文档)。
关于Python,如果你想运行一个Python程序,你得按照传统的方式把它安装好。除非你是在Windows上使用py2exe这种工具。
Qt(理想情况下)提供的是源代码兼容性,而不是二进制兼容性。这意味着你还是需要为每个平台单独编译你的应用程序,并且使用适合该平台的动态Qt库(这些库也需要单独编译,并且有一些特定于平台的代码)。
至于你最后的问题,用户需要安装Python、Qt库和绑定库(比如pyqt),不过有很多方法可以把这些打包在一起。
PyQT(还有它的开源版本PySide)是一个很棒的跨平台QT绑定库,适用于Python,但它并不是一个神奇的解决方案,不能让你在所有平台上轻松发布应用,而不需要进行任何打包或安装的维护。我觉得你可能期待一些魔法。
QT是一个用C++写的跨平台库。这意味着你可以一次性编写你的C++或Python(或者其他有绑定的语言)代码,然后创建一个“窗口”(比如表单、对话框,或者屏幕上的其他东西),并在里面放置控件(按钮等等),而不需要担心在Windows、Linux和Mac OS X上按钮的制作方式有什么不同。
因为它是一个库,所以可以用多种方式进行打包。它可以是“静态链接”(直接嵌入到你的可执行文件/二进制文件/应用中)或者“动态链接”(在Windows中称为DLL,在Unix/Linux中称为共享库,在Mac OS X中称为框架)。并不是所有情况下它都会被“安装”在电脑上,除非它是一个共享库。
即使它被“安装”在电脑上,可能在同一台电脑上会存在多个版本,所以不应该把它看作是对电脑的扩展,而是对电脑上某个应用(程序)的扩展。
如果你使用Python绑定QT,那么你应用的安装包需要包含QT绑定的二进制文件(Python扩展)、基本的Python运行环境,包括Python可执行文件和基本库,以及你的程序源代码。大部分内容可以打包成一个“捆绑包”。例如,在Mac OS X上,所有这些可以很容易地放入一个“.app”捆绑包中,而在Windows和Linux上,我相信有一些打包和安装工具可以帮助你轻松完成这项工作。
尽管你只需要为你的应用编写一次用户界面代码,但你并不能神奇地在所有三个主要平台上同时发布应用,而不需要为每个平台单独构建安装程序或打包。用户期望下载适用于Windows或Mac OS X的安装包,而对于Unix/Linux,则还要看你安装的是哪个发行版。