在Python中原型开发Qt/C++
我想用C++和Qt写一个应用程序,但首先想用Python做一个原型,然后逐步把Python的代码换成C++。
这样做对吗?我应该使用哪些工具(比如绑定、绑定生成器、开发环境)呢?
最好这些工具都能在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/其他的东西,还得解释怎么安装Python和其他所有东西。
3 个回答
在开始编写原型代码之前,我会先画一些用户界面的草图。这样做有几个好处:
比起直接编码原型,这样更快,因为不需要编程
可以快速给一些小部件,比如表格和树形结构,填充数据
可以在你的界面上添加描述和备注
可以轻松把草图放进规范文档里,而不需要截图
在实际实现之前,可以先验证一下用户界面的设计想法
有很多工具可以帮助你做到这些,但如果你打算使用Qt的话,MockupUI可能是个不错的选择,因为它能用Windows 7、8或10的原生风格来渲染Qt小部件,这样你的草图看起来会更真实。
如果你刚开始学习Qt,并想利用Python快速开发的优势,我建议你可以用PyQt
做一个示例项目。正如你所说,有一个debian软件包,所以你只需要简单地用apt-get
命令,就能开始制作你的第一个应用程序。
我个人使用gVim
作为我的Python/Qt编辑器,但其实你可以用任何对Python友好的编辑器,使用起来都没什么问题。我之前喜欢过WingIDE
,它对Qt有自动补全功能,但一旦你习惯了vim,就很难再换其他编辑器了。
我觉得PySide
和PyQt
的兼容性超过95%,而且LPGL
许可证也不错,但如果你只是想快速制作你的第一个Qt应用,我觉得没有必要非得用PySide
。不过,我确实觉得PySide
的文档更好用,你也可以直接用它的文档,只需把所有的库引用换成PyQt
就行。
根据你要构建的应用复杂程度,可能从头开始用C++版本会比尝试进行一些复杂的SIP
重构要好。一旦你对Qt框架有了扎实的理解,切换C++和Python的绑定就会变得很轻松。
我想用Qt写一个C++应用程序,但先用Python做个原型,然后逐渐把Python代码替换成C++。这样做对吗?
这要看你的目标是什么。如果你有过这两种语言的经验,我建议你尽可能多地使用Python。虽然这需要一些自律,但用Python写出非常大的应用程序是完全可能的。不过,当你发现某些地方需要更高效的处理时,可以把相关部分转到C++。
有没有关于这个过程的全面文档,还是我得学习每一个组件?如果是的话,哪些是必须的?
对于各个部分,我的建议如下:
编辑器/IDE:使用你熟悉的任何编辑器或IDE,但我强烈推荐一个支持重构的工具。如果你对Eclipse很熟悉,就用它。如果你主要想走C++这条路,但对编辑器不太了解,QtCreator可能更适合你。Eric是一个非常好的Python IDE,支持重构,除非你要做很多C++的工作,可以看看这个。更棒的是,它的源代码是一个很好的PyQt使用和实践的例子。
过程:
简单总结一下:
一般细节:
用PyQt在Python中写应用程序。要注意保持良好的关注点分离,这样当你需要把某些部分转到C++时,它们就能和依赖关系分开。当你最终需要把某个部分转到C++时,用C++/Qt写它,然后使用SIP为它创建绑定。SIP有一个很好的参考手册,而且你可以用所有的PyQt作为例子。
部署:
C++ - 对于许多应用程序,依赖关系相对简单,因此使用像NullSoft的安装程序或InnoSetup这样的工具创建安装程序并不困难。
Python/PyQt - PyQt应用程序的安装稍微复杂一些,因为它依赖于Python以及Qt库的存在。有人在ARSTechnica的这篇文章中记录了他的努力。py2exe在Windows上效果不错,应该可以正常工作。根据我的经验,freeze.py(Python源代码中自带的)有时会在确定哪些共享库是必需时出现问题,可能会创建一个缺少依赖的二进制文件。Py2app可以在Mac OS X上使用。
更糟糕的是,PyQt/Qt的许可问题。如果你在开发商业应用程序,你需要拥有商业的PyQt(和Qt)许可证,并确保用户不能轻易修改源代码或以其他方式编写与PyQt/Qt API相关的代码因为许可限制。因此,PyQt的作者创建了一个叫做VendorId的工具(尽管它有Python许可证)。在VendorId中有一个叫做SIB的工具,可以用来创建一个只依赖于Python解释器的可执行文件。不过,如果你要做到这一点,可能还需要和你的应用程序一起安装一个定制的Python。
免责声明:我没有使用过PySide,所以不确定它和PyQt的比较情况。此外,请注意他们网站上的以下警告:
PySide仍在开发中,目前不适合需要生产级稳定性的应用程序开发。
不过好消息是,他们至少在初始版本中打算“保持与PyQt的API兼容”。所以,除了C++绑定之外,你以后可以很容易地在两者之间切换。