【问题标题】:Shiboken2 and custom Qt widgetShiboken2 和自定义 Qt 小部件
【发布时间】:2018-05-16 09:34:09
【问题描述】:

在 Windows 上,我需要在 Python 中使用一些用 C++ 编写的自定义 Qt5 小部件,并且由于其许可,我必须使用 pyside2

我已经能够从源代码编译pyside2 库(连同shiboken2 示例),但我无法找到如何包装自定义Qt5 小部件的简单示例。

我知道pyside2 还没有正式发布,但它似乎已经被使用(例如,在 Maya 中):In a PySide2 app, how can I get the ID for a QWindow?

任何人都可以提供提示或指示吗?一个最小的例子会更好。


编辑

基于@placinta cmets,我创建了一个repo,其中包含一个尝试包装自定义QMainWindow 的最小示例。

在我的测试中,我使用了 pyside2 Conda package 包装 Qt 5.6。

当我执行shiboken2 可执行文件时,我得到tons of warnings

我假设这些警告会触发带有shiboken2 生成代码的compilation error

【问题讨论】:

  • 这并不是一个完整的答案,因此我将其作为评论发布。您可以使用 scriptableapplication 示例作为参考。它位于 pyside 示例仓库 git://code.qt.io/pyside/examples.git 的 5.9 分支中。该示例为 QMainWindow 派生类创建绑定以及其他内容。 shiboken 调用由 qmake 在处理 scriptableapplication.pro 文件时完成,该文件处理 .xml 类型系统文件。
  • @Placinta 谢谢!你在项目中使用shiboken2吗?
  • 不,我是 PySide2 的开发者。
  • @Placinta,这太棒了!如果您能抽出时间将您的评论发展成完整的答案,那就太好了。

标签: c++ windows python-3.x qt5 pyside2


【解决方案1】:

我最初的 CMake 配置的一个问题是 here 所描述的问题。也就是说,CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 有限制,所以我恢复使用“旧”export headers

但是,缺少metaObject() 成员函数声明的编译错误仍然存​​在。它通过手动添加声明来工作,因为实现存在于_wrapper.cpp 中。虽然这不是一个真正令人满意的解决方案,但它是其他用户的起点。

https://bugreports.qt.io/browse/PYSIDE-597 的问题的 Qt 票。

【讨论】: