2016-05-16 55 views
7

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

回答

5

所以問題是QML邊垃圾收集我的對象後,我把它們交給QML。原因是我從來沒有設置這個QObject的父母。

相關問題