草庐IT

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

coder 2023-05-03 原文

我想用 Qt 写一个 C++ 应用程序,但是先用 Python 构建一个原型(prototype),然后逐渐用 C++ 替换 Python 代码。

这是正确的方法吗?我应该使用哪些工具(绑定(bind)、绑定(bind)生成器、IDE)?
理想情况下,所有东西都应该在 Ubuntu 存储库中可用,这样我就不必担心不兼容或旧版本的问题,只需通过简单的 aptitude install 即可完成所有设置。
是否有任何关于此过程的综合文档,或者我是否必须学习每一个组件,如果是,哪些组件?

现在我有多种选择: Qt Creator,因为它很好的自动完成和 Qt 集成。
Eclipse,因为它同时支持 C++ 和 Python。 Eric(还没用过) 虚拟机

PySide 因为它与 CMake 和 Boost.Python 一起工作,所以理论上它会使替换 python 代码更容易。 PyQt 因为它被更广泛地使用(更多支持)并且可以作为 Debian 包使用。

编辑:由于我必须将程序部署到不同的计算机,C++ 解决方案需要 1-5 个文件(如果我静态链接程序和一些库文件),使用 Python 我必须在每个平台上构建 PyQt/PySide/SIP/whatever 并解释如何安装 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?

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

EDITOR/IDE:使用您喜欢的任何编辑器/IDE,但我强烈推荐支持重构的编辑器/IDE。如果您对 Eclipse 感到满意,请使用它。如果您想主要走 C++ 路线并且您对任何编辑器都不太熟悉,那么使用 QtCreator 可能会更好。 Eric是一个非常优秀的 Python IDE,支持重构,除非你会做很多 C++,看看它。更好的是,它的源代码是一个很好的 PyQt 使用和实践的例子。

过程:

快速总结:

  1. 使用 PyQt 在 Python 中编写应用程序
  2. 当识别为热点时,将解耦的 Python 类转换为 C++
  3. 使用 SIP 为这些类创建绑定(bind)
  4. 在 Python 中导入新定义的库以代替其对应的 Python
  5. 享受速度提升

一般细节:

使用 PyQt 在 Python 中编写应用程序。小心养好separation of concerns因此,当您需要将片段移植到 C++ 时,它们将与它们的依赖项分开。当你最终需要将某些东西移植到 C++ 时,用 C++/Qt 编写它,然后使用 SIP 为其创建绑定(bind)。 . SIP 有一个 good reference manual关于这个过程,你有所有的 PyQt 作为例子。

部署:

C++ - 对于许多应用程序,依赖关系非常简单,因此使用像 NullSoft's Installer 这样的工具创建安装程序并不难。或 InnoSetup .

Python/PyQt - PyQt 应用程序安装起来有点困难,因为它依赖于 Python 并且依赖于 Qt 库的存在。一个人在 this post at ARSTechnica 上记录了他的努力。 . py2exe 在 Windows 上运行良好,应该可以正常工作。 IME,freeze.py,随 Python 源代码一起提供,有时在确定哪些共享库是真正必要的时会出现问题,有时最终会创建一个不存在依赖项的二进制文件。 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 is a work in progress and is not yet suited for application development requiring production-level stability.

但是,很好地说明,他们打算,至少在初始版本中“保持 API 与 PyQt 的兼容性”。因此,除了 C++ 绑定(bind)之外,您以后还可以轻松地在两者之间切换。

关于c++ - 在 Python 中制作 Qt/C++ 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2693558/

有关c++ - 在 Python 中制作 Qt/C++ 原型(prototype)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  7. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  8. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  9. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  10. Qt Designer的简单使用 - 2

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q

随机推荐