Prototyping Qt/C++ in Python
我想用Qt编写一个C++应用程序,但是首先使用Python构建一个原型,然后用C++逐步替换Python代码。
这是正确的方法吗?我应该使用哪些工具(绑定、绑定生成器、IDE)?理想情况下,Ubuntu存储库中的所有内容都应该是可用的,这样我就不必担心不兼容或旧版本的问题,也不必担心所有内容都是用一个简单的
现在我有多种选择:qt的创建者,因为良好的自动完成和qt集成。Eclipse,因为它提供了对C++和Python的支持。埃里克(还没用)vim
pyside,因为它使用cmake和boost.python,所以理论上它将使替换python代码更加容易。Pyqt,因为它被更广泛地使用(更支持),并且作为Debian包提供。
编辑:因为我必须把程序部署到各种计算机上,C++解决方案将需要1-5个文件(程序和一些库文件,如果我静态链接),使用Python,我必须在每个平台上建立PyQT/pySe/SIP/任何东西,并解释如何安装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?
以下是我推荐的各种款式:
编辑器/ide:使用任何您熟悉的编辑器/ide,但我强烈推荐支持重构的编辑器/ide。如果你对Eclipse感到满意,可以使用它。如果你想主要走C++路线,而你对任何编辑器都不太熟悉,你最好和QtCreator在一起。埃里克是一个非常好的支持重构的Python IDE,除非你要做很多C++,看一下。更好的是,它的源代码是良好的Pyqt用法和实践的一个例子。
过程:
快速总结:
一般细节:
使用pyqt在python中编写应用程序。注意保持关注点的良好分离,这样当您需要将块导入C++时,它们将与它们的依赖项分离。当您最终需要向C++发送一些东西时,将其写入C++/QT中,然后使用SIP为其创建绑定。SIP有一个关于这个过程的很好的参考手册,您可以以所有Pyqt为例。
部署:
对于许多应用程序来说,依赖关系足够简单,使用NulLFoSE的安装程序或iNoNETUP这样的工具创建一个安装程序并不太困难。
python/pyqt-pyqt应用程序安装起来有点困难,因为它依赖于python,并且依赖于qt库的存在。一个人记录了他在Arstechica这个职位上的努力。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 is a work in progress and is not yet suited for application development requiring production-level stability.
但是,好的是,他们希望至少在最初的版本中"保持API与PyQt的兼容性"。因此,除了C++绑定之外,你可以很容易地在两者之间切换。
如果您只是学习qt,并且希望利用Python提供的原型开发速度,那么我建议您使用
我个人使用
我会说,
取决于你正在构建的应用程序的复杂性,最好是用C++版本从头开始,而不是尝试一堆EDOCX1×10重构黑魔法。一旦您对QT框架有了坚实的把握,您应该能够毫不费力地在C++和Python绑定之间切换。
在开始编写原型代码之前,我将绘制UI原型。以下是一些好处:
由于不涉及编程,因此比编写原型更快
用数据快速填充小部件,如表和树
在屏幕上添加说明和注释
轻松地将模型集成到规范文档中,而无需捕获屏幕
在实现之前验证UI设计概念
有很多工具可以帮助您做到这一点,但如果您要使用qt,mockupui可能是一个不错的选择,因为它呈现了qt小部件,带有Windows 7、8或10的本机样式,这使您的mockup看起来更逼真。