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

Fab*_*ian 7 python qt pyqt qml

我用我的Python3 QML程序遇到了一个不起眼的问题(bug?).我实现了一个带有自定义get方法的QAbstractListModel来获取底层的QObject项.我尝试在QML中的两个不同位置获取相同的Python QObject时,我得到:

TypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance
Run Code Online (Sandbox Code Playgroud)

get方法如下所示:

@pyqtSlot(int, result=QMyItem)
def get(self, row):
    return self._items[row]
Run Code Online (Sandbox Code Playgroud)

这样的模型:

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

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

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

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

Fab*_*ian 6

所以问题是QML端垃圾收集我的对象后我把它们交给QML.原因是我从未在这个QObjects上设置父.