2016-05-16 26 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的父母。

相关问题