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/whatever 在每个平台上,并解释如何安装 Python 和其他一切。

4

3 回答 3

36

我想用 Qt 写一个 C++ 应用程序,但是先用 Python 构建一个原型,然后逐渐用 C++ 替换 Python 代码。这是正确的方法吗?

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

是否有任何关于此过程的综合文档,或者我是否必须学习每一个组件,如果是,哪些?

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

EDITOR/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 的 InstallerInnoSetup等工具创建安装程序并不难。

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++ 绑定之外,您以后还可以轻松地在两者之间切换。

于 2010-04-22T19:26:41.650 回答
3

如果您刚刚学习 Qt 并希望利用 Python 为您提供的原型设计速度,那么我建议您使用PyQt. 正如你所说,有一个 debian 包,所以你apt-get离制作你的第一个应用程序很简单。

我个人将gVim其用作我的 Python/Qt 编辑器,但您可以真正使用任何 Python 友好的编辑器而不会遇到太多麻烦。我喜欢WingIDE它们,并且它们具有 Qt 的自动完成功能,但是一旦您从 vim kool-aid 中啜饮,就很难切换。

我会说这PySide是 95%+ 兼容PyQt并且LPGL许可证很好,但如果你只是想为你的第一个 Qt 应用程序制作原型,那么我认为没有真正的理由使用PySide. 虽然,我确实更喜欢这些PySide文档,但您也可以只使用它们并将所有库引用替换为PyQt.

根据您正在构建的应用程序的复杂性,最好从头开始使用 C++ 版本,而不是尝试做一堆SIP重构黑魔法。一旦您牢牢掌握了 Qt 框架,您应该能够毫不费力地在 C++ 和 Python 绑定之间切换。

于 2010-04-22T20:09:59.393 回答
1

在开始编写原型代码之前,我会绘制 UI 模型。这里有一些好处:

  • 比编码原型更快,因为不涉及编程

  • 用数据快速填充小部件,例如表格和树

  • 向屏幕添加说明和注释

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

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

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

于 2016-08-07T16:58:46.697 回答