gpt4 book ai didi

python - 从 QML 访问 Python QObject 无法在第二次调用时转换

转载 作者:太空狗 更新时间:2023-10-29 21:45:37 27 4
gpt4 key购买 nike

我的 Python3 QML 程序遇到了一个模糊的问题(错误?)。我使用自定义 get 方法实现了 QAbstractListModel 以获取底层 QObject 项。当我尝试在 QML 的两个不同位置获取相同的 Python QObject 时,我得到:

TypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance

获取方法如下所示:

@pyqtSlot(int, result=QMyItem)
def get(self, row):
return self._items[row]

模型是这样的:

ComboBox {
model: mymodel
textRole: 'name'
onActivated: mymodel.item = model.get(index)
onModelChanged: currentIndex = getCurrentIndex(mymodel, mymodel.item)
}

这个问题实际上与我检索 QObject 的方式无关。这似乎真的是关于 Python 到 QML 的转换。就好像转换器保留了一个已经传递的引用列表并且以某种方式不同步。

我现在有一个显示错误的最小示例。https://github.com/sturmf/python_samples.git 获取源代码并进入文件夹 pyqt_combobox_qabstractlistmodel。在那里以 python3 main.py 开始示例。在显示的 ComboBox 中,您可以看到您可以选择项目 three 但项目 one 在控制台上给您一个错误。原因是项目一已经从 Python 传递到 QML 并且第二次不起作用。

也许转换后的 QObject 在 QML 端以某种方式被垃圾收集了?

最佳答案

所以问题是,在我将对象交给 QML 之后,QML 端垃圾收集了我的对象。原因是我从来没有为这个 QObjects 设置父对象。

关于python - 从 QML 访问 Python QObject 无法在第二次调用时转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37257387/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com