我用我的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方面收到了某種垃圾回收?