Qt的语言绑定是否以特定语言重新实现Qt模块?

时间:2014-03-16 04:58:18

标签: java c++ qt pyqt qt-jambi

我想知道Qt的语言绑定是否像Qt Jambi和PyQt一样实现了所有Qt模块。即它们是否只是将目标语言(JAVA,python,...)与Qt C ++模块相结合的一种手段,或者目标语言与使用目标语言实现的模块一起工作。

e.g。一个简单的问题是:Qt Jambi是否使用用Java编写的Qt模块? (如果是的话,我们可以编写能够在不同平台上运行的Qt Jambi应用程序吗?即所有Qt Jambi模块都是一些jar文件吗?)

2 个答案:

答案 0 :(得分:2)

就PyQt而言,它是否已经实现了所有Qt模块的答案"是:是和否。但大多数没有。

PyQt使用SIP工具生成其绑定。如果你想了解这是如何完成的,下面是PyQt和SIP的作者如何解释这个过程:

  

对于PyQt v4,我使用内部工具(当然使用PyQt编写)   叫metasip。这是一种SIP的IDE。它使用GCC-XML   解析最新的头文件并将相关数据保存为XML   一个metasip项目。 metasip然后相当于差异   以前版本的API并标记需要的任何更改   看看。然后通过GUI进行这些更改并勾选   关闭TODO列表。生成.sip文件只需按一下按钮。   在我的subversion存储库中,PyQt v4基本上只是一个20M的XML文件。   更新PyQt v4以获得Qt v4的次要版本大约需要半个小时   工作

     

就生成的代码如何工作而言,我并不认为它非常   不同于任何其他绑定生成器的工作方式。 Python有一个   用于编写扩展模块的非常好的C API - 它是其中之一   为什么这么多第三方工具有Python绑定的原因。每一个   在C ++类中,SIP生成的代码创建了一个相应的Python类   在C中实施。

因此,PyQt只是围绕Qt模块的一组相当薄的包装器,并且通常不会实现任何功能本身。但是,有一些例外。

首先,PyQt在各个地方添加了一些语法糖,以使Qt API对Python编码器更加可口(例如,new-style signal and slot support)。

其次,由于C ++和Python之间存在基本的语言差异(例如,没有什么能与Python中的类型转换相提并论),因此有些Qt API对PyQt没有任何意义。

最后,有uic module。与PySide不同,PyQt根本不包装QtUiTools模块。相反,它提供了一个用纯Python编写的模块,实际上 实现了Qt库中的等效功能。但这是例外,而不是规则。

除了上述内容之外,我还没有其他许多差异和遗漏(特别是关于PyQt5)。与所有语言绑定一样,基本目标是在两种语言之间提供实用通信方式,而不是完美的一对一映射。

答案 1 :(得分:1)

他们没有覆盖所有内容,没有。这是my previous answers中的一个,表明PySide缺少一个类的包装。

在Stack Overflow上实现它之后,我不得不手工制作它。一般来说,它高度依赖于特定Qt绑定的作者。其中一些是很好的,但有些没有维持一段时间。

关于你的Qt Jambi和jar问题,我不确定,但至少有一些代码级别的分离,你可以在here中看到它。