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

我想用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 /所有平台上的所有内容,并说明如何安装Python和其他所有内容。

参考方案

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

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

是否有关于此过程的全面文档,还是我必须学习每个组件,如果是,则学习哪个组件?

这是我对各种作品的推荐:

编辑器/ IDE :使用任何您喜欢的编辑器/ IDE,但我强烈建议您使用一个支持重构的编辑器/ IDE。如果您对Eclipse感到满意,请使用它。如果您想主要采用C++路线,并且您对任何编辑器都不是很熟悉,那么使用QtCreator可能会更好。 Eric是一个非常出色的Python IDE,具有重构支持,除非您要进行大量C++编程,否则请看一看。更好的是,其源代码是PyQt良好用法和实践的一个示例。

过程:

快速总结:

  • 使用PyQt
  • 在Python中编写应用程序

  • 当被识别为热点时,将解耦的Python类转换为C++
  • 使用SIP
  • 为这些类创建绑定

  • 代替Python对应的
  • 在Python中导入新定义的库

  • 享受速度的提升
  • 一般细节:

    使用PyQt用Python编写应用程序。注意保持良好的separation of concerns,以便当您需要将片段移植到C++时,它们将与它们的依赖项分开。当您最终需要将某些东西移植到C++时,请用C++ / Qt编写它,然后使用SIP为它创建绑定。 SIP在此过程中有一个good reference manual,并且您以所有PyQt为例。

    DEPLOYMENT :

    C++-对于许多应用程序,依赖性非常简单,以至于使用NullSoft's Installer或InnoSetup之类的工具来创建安装程序并不难。

    Python / PyQt-PyQt应用程序的安装有点困难,因为它依赖于Python及其依赖于Qt库的存在。有人记录了他对this post at ARSTechnica的努力。 py2exe在Windows上运行良好,应该可以正常工作。 Python源随附的IME Frozen.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++绑定之外,您以后可以轻松地在两者之间切换。

    在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

    我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…

    如何用Cython保持C++类名不变? - c++

    我有一个名为Foo的C++类。如果遵循Cython C++ tutorial,则需要以其他方式调用Python类,例如PyFoo。但是我确实也需要调用Python类Foo。如何有效地做到这一点?编辑:我正在尝试接口以前与Boost Python接口的现有C++库。由于不同的原因,我想测试Cython。由于使用Boost:Python调用了Python类,因此…

    从C++调用Python函数 - c++

    我正在尝试从C++实现调用Python函数。我以为可以通过函数指针来实现,但是似乎不可能。我一直在使用boost.python完成此操作。假设在Python中定义了一个函数:def callback(arg1, arg2): #do something return something 现在,我需要将此函数传递给C++,以便可以从那里调用它。如何使用boos…

    PyQt与PySide的比较 - c++

    Improve this question 我目前在Linux上的Qt重载C++ / Python环境中开发许多应用程序,并根据需要移植到PC / Mac。我使用嵌入在C++和独立GUI中的Python。 Qt用于xml解析/事件处理/ GUI /线程等等。现在我所有的Python工作都在PyQt中,我想看看每个人如何看待PySide。我很感兴趣,因为它在内…

    SWIG和C++共享库 - c++

    我有一个C++库(我们将其称为mylib)编译为libmylib.so中的/usr/local/lib文件,并且我在my lib中一个名为/usr/local/include的目录中有许多头文件。现在,我想做的(对于初学者而言)只是将其中一个头文件(包含有关我的图书馆提供的类的信息)与SWIG一起使用,以生成mylib_wrap.cxx文件,然后进行编译并将…