用Python原型制作Qt/C++

25

我想使用Qt编写C++应用程序,但是首先使用Python构建原型,然后逐步用C++替换Python代码。

这种方式正确吗?我应该使用什么工具(绑定、绑定生成器、IDE)?
理想情况下,所有内容都应该在Ubuntu存储库中可用,这样我就不必担心不兼容或旧版本,并且可以通过简单的aptitude install设置好一切。
有没有关于此过程的综合文档,还是我必须学习每个组件,如果是,那么哪些组件?

现在我有多个选择: Qt Creator,因为它提供了良好的自动完成和Qt集成。
Eclipse,因为它支持C++和Python。 Eric(尚未使用) Vim

PySide可以与CMake和Boost.Python一起使用,因此理论上它将使替换Python代码更容易。 PyQt更广泛地使用(更多的支持),并且作为Debian软件包可用。

编辑:由于我必须将程序部署到各种计算机上, C++-解决方案只需要1-5个文件(如果我静态链接,则为程序和一些库文件),使用Python我必须在每个平台上构建PyQt/PySide/SIP/任何其他内容并说明如何安装Python和其他所有内容。

3个回答

36
我想使用Qt编写C++应用程序,但首先使用Python构建原型,然后逐步用C++替换Python代码。这是正确的方法吗?
这取决于您的目标。我已经两种语言都做过,我建议您尽可能合理地使用Python。虽然需要一些纪律性,但非常可能在Python中编写极大的应用程序。但是,当您发现热点和可以更好地处理的事情时,可以将相关部分移植到C ++。
有关此过程的综合文档是否存在,还是我必须学习每个组件,如果是,哪些组件?
对于各个部分,我建议如下:
编辑器/IDE:使用任何您熟悉的编辑器/IDE,但我强烈建议使用支持重构的编辑器/IDE。如果您熟悉Eclipse,请使用它。如果您主要走C ++路线,并且不太熟悉任何编辑器,则您可能最好使用QtCreator。Eric是一个非常好的Python IDE,支持重构,除非您将要做大量的C ++,否则请查看它。更好的是,它的源代码是PyQt使用和实践的一个例子。
进程:
快速摘要:
  1. 使用PyQt编写Python应用程序
  2. 当识别为热点时,将解耦的Python类转换为C++
  3. 使用SIP创建这些类的绑定
  4. 将新定义的库导入Python中,以取代其Python对应项
  5. 享受速度提升

一般细节:

使用PyQt在Python中编写应用程序。请注意保持良好的关注点分离,以便在需要将某些部分移植到C++时,它们将与它们的依赖项分开。最后需要将某些东西移植到C++时,请使用C++/Qt编写它,然后使用SIP为其创建绑定。 SIP在该过程中有一个良好的参考手册,而您可以将PyQt作为示例。

部署

C++ - 对于许多应用程序来说,依赖关系足够简单,使用诸如NullSoft's InstallerInnoSetup之类的工具创建安装程序并不太困难。

Python/PyQt - 由于依赖于 Python 并且依赖于 Qt 库的存在,因此 PyQt 应用程序的安装要复杂一些。有人在ARSTechnica 的这篇文章中记录了他的努力。 py2exe 在 Windows 上运行得相当不错,应该可以正常工作。IME,附带 Python 源代码的freeze.py有时会出现问题,无法确定哪些共享库是真正必要的,有时会创建一个其依赖项不存在的二进制文件。Py2app 可以在 Mac OS X 上运行

但更糟糕的是 PyQt/Qt 的许可证。如果您正在开发商业应用程序,您需要拥有商业 PyQt(和 Qt)许可证,并确保防止用户轻松修改源代码或以其他方式针对 PyQt/Qt API 编写代码 由于许可限制。因此,PyQt 作者创建了一个名为 VendorId 的工具(虽然它具有 Python 许可证)。在 VendorId 中有一个名为 SIB 的工具,可以用于创建仅依赖于 Python 解释器的可执行文件。但是,如果您要走这么远,您可能需要安装一个自定义 Python 并将其与您的应用程序一起使用。
免责声明:我根本没有使用 PySide,所以我不确定它与 PyQt 相比如何。此外,请注意他们网站上的以下警告:
PySide 是一个正在进行中的项目,还不适合需要生产级稳定性的应用程序开发。
但是,好消息是,至少在最初发布时,他们打算“与 PyQt 保持 API 兼容”。因此,除了 C++ 绑定之外,您稍后可以轻松切换两者之间的差异。

很好的回答!您可以考虑在回应OP的编辑时,增加关于py2exe/freeze.py的部分,即使他们没有明确提出问题。 - tgray
@tgray - 感谢您提供的编辑提示。我已经添加了一个部署部分。 - Kaleb Pederson
2
也许需要更新 "Pyside 不适合生产级别" 部分,因为它已经有一段时间了。 - vikki
此时,我会考虑使用 PyInstaller 而不是 Py2exe 或 Py2app。我发现 PyInstaller 对于小到中等规模的应用程序可以直接使用,并且也具有跨平台兼容性。 - taynaron

3
如果你正在学习Qt并想利用Python的原型速度,那么我建议你使用PyQt制作一个样例项目。正如你所说,有一个debian包,因此你只需简单的执行apt-get命令就能创建你的第一个应用程序。
我个人使用gVim作为我的Python/Qt编辑器,但你可以使用任何友好的Python编辑器而不会遇到太多麻烦。我喜欢WingIDE,他们对Qt有自动完成功能,但一旦你接触了vim,就很难转换。
我认为PySidePyQt的兼容性在95%以上,而且LPGL许可证也很好,但如果你只是想原型化你的第一个Qt应用程序,那么我认为没有真正的理由使用PySide。虽然我喜欢PySide文档,但你也可以使用它们,并将所有库引用替换为PyQt
根据你正在构建的应用程序的复杂性,从头开始使用C++版本可能比尝试做一堆SIP重构黑魔法更好。一旦你对Qt框架有了牢固的掌握,你应该能够轻松地在C++和Python绑定之间切换。

1
我会在编写原型之前绘制UI模型。以下是一些好处:
  • 比编写原型更快,因为不涉及编程

  • 快速填充小部件,例如表格和树形结构,与数据

  • 为您的屏幕添加描述和注释

  • 将模型轻松集成到规范文档中,无需捕获屏幕

  • 在实施之前验证UI设计概念

有很多工具可以帮助你做到这一点,但如果你要使用Qt,则 MockupUI 可能是一个不错的选择,因为它以Windows 7、8或10的本机样式呈现Qt小部件,使您的模型看起来更加逼真。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接