c++ - 在 Python 中制作 Qt/C++ 原型(prototype)

标签 c++ python qt pyqt pyside

我想用 Qt 写一个 C++ 应用程序,但是先用 Python 构建一个原型(prototype),然后逐渐用 C++ 替换 Python 代码。

这是正确的方法吗?我应该使用哪些工具(绑定(bind)、绑定(bind)生成器、IDE)?
理想情况下,所有东西都应该在 Ubuntu 存储库中可用,这样我就不必担心不兼容或旧版本的问题,只需通过简单的 aptitude install 即可完成所有设置。
是否有任何关于此过程的综合文档,或者我是否必须学习每一个组件,如果是,哪些组件?

现在我有多种选择: Qt Creator,因为它很好的自动完成和 Qt 集成。
Eclipse,因为它同时支持 C++ 和 Python。 Eric(还没用过) 虚拟机

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

编辑:由于我必须将程序部署到不同的计算机,C++ 解决方案需要 1-5 个文件(如果我静态链接程序和一些库文件),使用 Python 我必须在每个平台上构建 PyQt/PySide/SIP/whatever 并解释如何安装 Python 和其他所有东西。

最佳答案

I want to write a C++ application with Qt, but build a prototype first using Python and then gradually replace the Python code with C++. Is this the right approach?

这取决于你的目标。两者都完成后,我建议您尽可能合理地使用 Python。尽管这需要一点纪律,但用 Python 编写超大型应用程序是很有可能的。但是,当您发现热点和可以在 C++ 中更好地处理的事情时,您当然可以将相关部分移植到 C++。

Is there any comprehensive documentation about this process or do I have to learn every single component, and if yes, which ones?

以下是我对各种作品的推荐:

EDITOR/IDE:使用您喜欢的任何编辑器/IDE,但我强烈推荐支持重构的编辑器/IDE。如果您对 Eclipse 感到满意,请使用它。如果您想主要走 C++ 路线并且您对任何编辑器都不太熟悉,那么使用 QtCreator 可能会更好。 Eric是一个非常优秀的 Python IDE,支持重构,除非你会做很多 C++,看看它。更好的是,它的源代码是一个很好的 PyQt 使用和实践的例子。

过程:

快速总结:

  1. 使用 PyQt 在 Python 中编写应用程序
  2. 当识别为热点时,将解耦的 Python 类转换为 C++
  3. 使用 SIP 为这些类创建绑定(bind)
  4. 在 Python 中导入新定义的库以代替其对应的 Python
  5. 享受速度提升

一般细节:

使用 PyQt 在 Python 中编写应用程序。小心养好separation of concerns因此,当您需要将片段移植到 C++ 时,它们将与它们的依赖项分开。当你最终需要将某些东西移植到 C++ 时,用 C++/Qt 编写它,然后使用 SIP 为其创建绑定(bind)。 . SIP 有一个 good reference manual关于这个过程,你有所有的 PyQt 作为例子。

部署:

C++ - 对于许多应用程序,依赖关系非常简单,因此使用像 NullSoft's Installer 这样的工具创建安装程序并不难。或 InnoSetup .

Python/PyQt - PyQt 应用程序安装起来有点困难,因为它依赖于 Python 并且依赖于 Qt 库的存在。一个人在 this post at ARSTechnica 上记录了他的努力。 . py2exe 在 Windows 上运行良好,应该可以正常工作。 IME,freeze.py,随 Python 源代码一起提供,有时在确定哪些共享库是真正必要的时会出现问题,有时最终会创建一个不存在依赖项的二进制文件。 Py2app can be made to work on Mac OS X .

但更糟糕的是,然而,是 PyQt/Qt 许可。如果您正在开发商业应用程序,则需要拥有商业 PyQt(和 Qt)许可证,并确保防止用户轻松修改源代码或以其他方式针对 PyQt/Qt API because of licensing restrictions 编写代码.因此,PyQt 作者创建了一个名为 VendorId 的工具。 (尽管它有 Python 许可证)。 VendorId 中有一个名为 SIB 的工具。可用于创建仅依赖于 Python 解释器的可执行文件。但是,如果您打算走这么远,您可能需要安装自定义 Python 以及您的应用程序。

免责声明:我没有使用过 PySide完全没有,所以我不确定它与 PyQt 相比如何。另外,请注意他们网站上的以下警告:

PySide is a work in progress and is not yet suited for application development requiring production-level stability.

但是,很好地说明,他们打算,至少在初始版本中“保持 API 与 PyQt 的兼容性”。因此,除了 C++ 绑定(bind)之外,您以后还可以轻松地在两者之间切换。

关于c++ - 在 Python 中制作 Qt/C++ 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2693558/

相关文章:

javascript - 为 Qt 文本片段创建鼠标悬停事件监听器

c++ - 尽管 IP 地址发生变化,仍保持网络连接

c++ - 二进制数据包的 32 位逐位异或非值

python - Pandas dataframe groupby 并组合多个行值

javascript - javascript 的 every() 在 python 中相当于什么?

android - Android 是否支持 Qt QSharedMemory?

c++ - 这个程序不会在任何地方打印系统日志?

c++ - 如何在 C++ 中将大数字字符串转换为整数?

python - Mako 模板中的 UnicodeEncodeError

c++ - 增加Qt中文本和复选框之间的空间