在 Python 中使用自定义 Qt 子类

2023-12-09

首先:我对 Qt 和 SWIG 都是新手。目前正在阅读这两个文件的文档,但这是一项耗时的任务,因此我正在寻找一些剧透。预先知道某件事是否行不通是件好事。

我正在尝试为一些内部软件制定模块化架构。核心组件采用 C++ 语言,并通过 SWIG 暴露给 Python,以便进行新组件的实验和快速原型设计。 Qt 似乎有一些类我可以用来避免在这里过多地重新发明轮子,但我担心其中一些部分如何组合在一起。

具体来说,如果我创建一些 C++ 类,我需要通过 SWIG 公开它们。其中一些类可能是 Qt 类的子类,或者在其公共接口中公开了 Qt 内容。这似乎可能会引起一些并发症。

Python 中已经有两个 Qt 接口:PyQt 和 PySide。出于许可原因可能会使用 PySide。我希望让 Qt 类的 SWIG 包装的自定义子类与其中任何一个很好地配合,会有多痛苦?我应该预先了解哪些并发症?


PyQt 通过以下方式将 C++ 代码公开给 PythonSIP; PySide 是通过以下方式实现的Shiboken。两者都具有与 SWIG 大致相同的功能(除了它们仅支持“将 C++ 扩展为 Python”,而 SWIG 还具有 Ruby、Perl、Java 等的后端)。 SWIG、SIP 和 Shiboken 均未设计为可相互互操作。您无法方便地使用 SWIG 来使用 Qt 所需的 C++ 扩展来包装任何代码(以支持信号和插槽),并且我不知道在尝试互操作 SIP 包装(或 Shiboken 包装)和 SWIG 时可能会遇到什么危险- 包装的代码。

请问,为什么您选择使用两种独立且等效的方式来包装 C++ 代码库的不同部分(Qt 通过 SIP 或 Shiboken,其他所有内容通过 SWIG)?如果您仍然可以重新考虑这个奇怪的设计决定,我会真诚地建议您这样做。

如果您对 SWIG 的选择是一成不变的,那么我预测每当您使用 Qt 扩展(即槽或信号)包装 C++ 代码时都会遇到很大的麻烦,并且对于所有相关人员来说通常都是非常痛苦的时间。如果你选择one如果能用正确的方式包裹并坚持下去,问题应该会大大减少。我没有使用 Shiboken 的实际经验(它有点太新了,而且我现在几乎不再做 GUI 应用程序了……我的世界都是 Web 应用程序!-),但过去曾在这个角色中使用过 SIP(早在它被正式记录之前——现在在我看来,它是出色地文档中,对 Shiboken 的粗略细读给了我同样的印象),我可以高度推荐它(事实上,如果我可以选择它,它可能是一个比 SWIG 更好的选项,即使项目中不涉及 Qt 代码)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中使用自定义 Qt 子类 的相关文章

随机推荐

  • SQLite 相当于 ISNULL()、NVL()、IFNULL() 或 COALESCE()

    我想避免在我的代码中进行许多如下检查 myObj someStringField rdr IsDBNull someOrdinal string Empty rdr GetString someOrdinal 我想我可以让我的查询通过执行以
  • Javascript的replace()函数[重复]

    这个问题在这里已经有答案了 这是一个简单的 Replace 问题 我无法让它替换下面函数中的子字符串 function linkOnClick var anyNameYouLike some sort of text string righ
  • 验证 Web Api 服务中的 Azure 移动服务令牌

    我正在尝试在使用 Web Api 服务的跨平台移动应用程序上实现身份验证和识别 我的计划是将身份验证导出到联合云服务 例如新的 Azure 移动服务 客户端移动应用程序将使用移动服务身份验证流程 获取令牌 然后将其在请求标头内发送到 Web
  • 从图像中读取透明像素

    有没有办法使用javascript从图片中读取透明像素 我认为 这可能类似于 PNG 修复对 IE 所做的事情 读取透明像素并应用一些东西 哈哈 但是 是的 对于每个浏览器 啊 如果不用 HTML5 也能实现那就太棒了 这个问题实际上是由来
  • 如何在 QGraphicsView 中启用平移和缩放

    我正在使用 python 和 Qt Designer 来实现加载 tiff 图像并在某些鼠标事件上启用平移和缩放 滚轮 缩放 按滚轮 平移 我正在研究一些可以处理图像等的选项和类 到目前为止我发现 QGraphicsScene QImage
  • 我们怎么知道应用程序不能是 Monad?

    从验证的例子 https hackage haskell org package Validation 我试图直观地检测应用程序如何 为什么不能是 Monad 为什么 AccValidation 不能有 Monad 实例 你能挑战我的推理吗
  • 扩展 sys_file_reference (FAL)

    我想用自己的字段扩展 sys file reference 所以我创建了该字段和 TCA 在后端 该字段可用 但我无法引用流体模板中的该字段 ext tables php CREATE TABLE sys file reference no
  • 如何在jsp中迭代多个属性

    我正在尝试迭代属性文件中的一组键 以便仅输出 message pX a property foo message p1 a message p2 b message p3 c some other property bar 我不知道文件中将
  • Firebase 电话身份验证和链接

    我正在尝试将我的电话号码与我的电子邮件密码身份验证链接起来 所以我使用以下步骤构建我的注册 用户输入电子邮件地址和密码 然后我打电话firebase auth createUserWithEmailAndPassword values em
  • 高分辨率 CSS 精灵

    我正在生成 CSS 精灵 我想以多种尺寸使用这些精灵 我已经搜索过 但无法弄清楚如何在功能上缩放 CSS 精灵 例如如果原始精灵的分辨率为 150x150 而我想以 50x50 显示它 我该怎么做 background size似乎打破了它
  • 强制 ElementTree 使用结束标签

    而不是
  • 在 Ruby 中使用类实例变量作为互斥体

    Note 下面显示的代码摘要是not我遇到问题的代码的精炼 因为其他人已经回答了 所以我将原始摘要留在这里 但是actual代码显示在我下面提供的答案中 我无法将其与一个小的失败测试用例隔离 但我在以下一般构造中遇到了失败 class Fo
  • 无法在 R 中安装基于 fortran 的软件包 - “gfortran -m32:未找到”

    我正在编写一个包含 Fortran 源代码的 R 包 简而言之 我的问题是 当我尝试安装该软件包时 出现错误 gfortran m32 未找到 但是 当我不安装该软件包时 我可以使用 gfortran m32 编译我的代码 详细版本 我已经
  • 如何以编程方式获取 WIN10 / MS Store 应用程序的图标?

    我一直在谷歌上搜索一种以编程方式获取icons对于 WIN10 MS 应用程序 即现代应用程序 我已经有了 AUMID 例如7 ZIP FILE MANAGER shell appsfolder 6D809377 6AF0 444B 895
  • 绘制到 p5.Image 而不是画布

    给定加载的 png 图像作为模板 我希望用户能够跟踪图像的元素 在 p5 中 这很简单 setup Load image var img loadImage image img 0 0 draw ellipse mouseX mouseY
  • 在Xcode中,如何抑制特定源文件中的所有警告?

    在我的应用程序中 我使用触发一些警告的第三方代码 我查看了它们 可以安全地忽略它们 现在我想以某种方式 标记 一个文件 这样 Xcode 就不会对该文件中的代码显示任何警告 我该怎么做呢 选择您的目标并显示构建阶段 然后在搜索框中输入文件名
  • 为什么溢出隐藏会阻止浮动元素逃离其容器?

    我遇到的网页常见问题是浮动div标签爬出其容器 如代码片段所示 wrapper border 1px solid red wrapper div float left font size 3em div div Hello World di
  • 如何设置 Oxyplot 柱形图中条形的宽度?

    我正在尝试设置我的列系列中的条形宽度 但是设置ColumnWidth on the ColumnSeries没有效果 如何影响列的宽度
  • 当我收到验证错误 laravel 5.3 时,如何将输入字段边框颜色设置为红色

    我的验证控制器 public function store Request request dd request gt all Validations this gt Validate request name gt required mi
  • 在 Python 中使用自定义 Qt 子类

    首先 我对 Qt 和 SWIG 都是新手 目前正在阅读这两个文件的文档 但这是一项耗时的任务 因此我正在寻找一些剧透 预先知道某件事是否行不通是件好事 我正在尝试为一些内部软件制定模块化架构 核心组件采用 C 语言 并通过 SWIG 暴露给