我用我的Python3 QML程序触及一个模糊问题(bug?)。 我使用自定义get方法实现了一个QAbstractListModel,以获取底层的QObject项目。我试着在QML两个不同的地方,以获得相同的Python QObject的那一刻,我得到:从QML访问Python QObject无法在第二次调用时转换
TypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance
get方法看起来是这样的:
@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
开始样品。在所示的组合框中,请参阅您可以选择项目three
,但项目one
会在控制台上给您一个错误。原因是项目1已经从Python传递到QML,并且不再工作。
也许转换后的QObject在QML方面收到了某种垃圾回收?