我想用Qt编写一个C ++应用程序,但是首先使用Python构建一个原型,然后逐渐用C ++替换Python代码。
这是正确的方法,我应该使用哪些工具(绑定,绑定生成器,IDE)?
理想情况下,Ubuntu存储库中应该提供所有内容,因此我不必担心不兼容或旧版本,并且只需使用简单aptitude install
设置所有内容即可。
是否有关于此过程的全面文档,或者我是否必须学习每个组件,如果是,那么哪些组件?
现在我有多种选择: Qt Creator,因为良好的自动完成和Qt集成 Eclipse,因为它支持C ++和Python。 埃里克(尚未使用它) VIM
PySide因为它正在使用CMake和Boost.Python,所以从理论上讲它会更容易替换python代码。 PyQt因为它被更广泛地使用(更多支持)并且可以作为Debian包使用。
编辑:由于我必须将程序部署到各种计算机,因此C ++解决方案需要1-5个文件(程序和一些库文件,如果我静态链接它),使用Python我必须在每个平台上构建PyQt / PySide / SIP /无论如何安装Python以及其他所有内容。
答案 0 :(得分:35)
我想用Qt编写一个C ++应用程序,但是首先使用Python构建一个原型,然后逐渐用C ++替换Python代码。这是正确的做法吗?
这取决于你的目标。完成这两项工作后,我建议您尽可能合理地使用Python。虽然它需要一些纪律,但是用Python编写非常大的应用程序是非常可能的。但是,当您发现可以在C ++中更好地处理的热点和事物时,您当然可以将相关部分移植到C ++中。
是否有关于此过程的全面文档,或者我是否必须学习每个组件,如果是,那么哪些组件?
以下是我推荐的各种作品:
EDITOR / IDE :使用您熟悉的任何编辑器/ IDE,但我强烈建议您使用支持重构的编辑器/ IDE。如果您对Eclipse感到满意,请使用它。如果你想主要使用C ++路线并且你对任何编辑都不太熟悉,那么使用QtCreator可能会更好。 Eric是一个非常好的Python IDE,支持重构,除非你要做很多C ++,看看它。更好的是,它的源代码是一个很好的PyQt使用和实践的例子。
<强> PROCESS 强>:
快速摘要:
一般细节:
使用PyQt在Python中编写应用程序。小心保持良好separation of concerns,这样当你需要将片段移植到C ++时,它们将与它们的依赖项分开。当您最终需要将某些东西移植到C ++时,用C ++ / Qt编写它,然后使用SIP为它创建绑定。 SIP在进程中有一个good reference manual,你以PyQt为例。
<强>部署强>:
C ++ - 对于许多应用程序而言,依赖关系非常简单,使用NullSoft's Installer或InnoSetup等工具创建安装程序并不困难。
Python / PyQt - PyQt应用程序安装起来有点困难,因为它依赖于Python并且依赖于Qt库的存在。一个人记录了他对this post at ARSTechnica的努力。 py2exe 在Windows上运行良好,应该可以正常工作。与Python源一起提供的IME, freeze.py 有时会确定哪些共享库是真正必要的,有时最终会创建一个不存在依赖关系的二进制文件。 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正在进行中,尚不适合需要生产级稳定性的应用程序开发。
但是,好的,他们打算,至少在初始版本中“保持与PyQt的API兼容性”。因此,除了C ++绑定之外,您可以稍后在两者之间轻松切换。
答案 1 :(得分: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绑定之间切换。
答案 2 :(得分:1)
在开始编写原型代码之前,我会绘制UI模型。以下是一些好处:
比编码原型更快,因为不涉及编程
使用数据
在屏幕上添加说明和注释
轻松将模型集成到规范文档中,而无需捕获屏幕
在实施
有很多工具可以帮助你做到这一点,但如果你打算使用Qt,MockupUI可能是一个不错的选择,因为它为Windows 7,8或10呈现具有原生样式的Qt小部件这使你的模型看起来更逼真。