我想用 Qt 写一个 C++ 应用程序,但是先用 Python 构建一个原型,然后逐渐用 C++ 替换 Python 代码。这是正确的方法吗?
这取决于你的目标。两者都完成后,我建议您尽可能合理地使用 Python。尽管这需要一点纪律,但用 Python 编写超大型应用程序是很有可能的。但是,当您发现热点和可以在 C++ 中更好地处理的事情时,您当然可以将相关部分移植到 C++。
是否有任何关于此过程的综合文档,或者我是否必须学习每一个组件,如果是,哪些?
以下是我对各种作品的推荐:
EDITOR/IDE:使用任何你喜欢的编辑器/IDE,但我强烈推荐支持重构的编辑器/IDE。如果您对 Eclipse 感到满意,请使用它。如果您想主要走 C++ 路线并且您对任何编辑器都不太熟悉,那么使用 QtCreator 可能会更好。 Eric是一个非常优秀的 Python IDE,它支持重构,除非你要做很多 C++,否则看看它。更好的是,它的源代码是一个很好的 PyQt 使用和实践的例子。
过程:
快速总结:
- 使用PyQt在 Python 中编写应用程序
- 当识别为热点时,将解耦的 Python 类转换为 C++
- 使用SIP为这些类创建绑定
- 在 Python 中导入新定义的库以代替其对应的 Python
- 享受速度提升
一般细节:
使用 PyQt 在 Python 中编写应用程序。注意保持良好的关注点分离,以便当您需要将片段移植到 C++ 时,它们将与其依赖项分开。当您最终需要将某些东西移植到 C++ 时,用 C++/Qt 编写它,然后使用SIP为其创建绑定。SIP 有一个很好的过程参考手册,你有所有 PyQt 的例子。
部署:
C++ - 对于许多应用程序而言,依赖关系非常简单,因此使用NullSoft 的 Installer或InnoSetup等工具创建安装程序并不难。
Python/PyQt - PyQt 应用程序安装起来有点困难,因为它依赖于 Python 以及它依赖于 Qt 库的存在。一个人在 ARSTechnica 记录了他在这篇文章中所做的努力。 py2exe在 Windows 上运行良好,应该可以正常工作。Python 源代码附带的IME,freeze.py有时在确定哪些共享库是真正必要的时会出现问题,有时最终会创建一个不存在依赖项的二进制文件。Py2app 可以在 Mac OS X 上运行。
但更糟糕的是 PyQt/Qt 许可。如果您正在开发商业应用程序,则需要拥有商业 PyQt(和 Qt)许可证,并确保防止用户因许可证限制而轻易修改源代码或以其他方式针对 PyQt/Qt API 编写代码。因此,PyQt 作者创建了一个名为VendorId的工具(尽管它具有 Python 许可证)。VendorId 中有一个名为SIB的工具,可用于创建仅依赖于 Python 解释器的可执行文件。但是,如果您要走到这一步,您可能需要安装自定义 Python 以及您的应用程序。
免责声明:我根本没有使用过 PySide,所以我不确定它与 PyQt 相比如何。另外,请注意他们网站上的以下警告:
PySide 是一项正在进行的工作,还不适合需要生产级稳定性的应用程序开发。
但是,值得一提的是,他们打算至少在初始版本中“保持 API 与 PyQt 的兼容性”。因此,除了 C++ 绑定之外,您以后还可以轻松地在两者之间切换。