2016-05-16 55 views
7

Python3 QML programımda belirsiz bir soruna (hata?) Basıyorum. Temel QObject öğelerine ulaşmak için bir özel get yöntemiyle bir QAbstractListModel uyguladım. Ben QML iki farklı yerlerde aynı Python QObject elde etmeye çalışmak an alıyorum:Erişim Python QObject, QML'den ikinci çağrıya dönüştürülemiyor

@pyqtSlot(int, result=QMyItem) 
def get(self, row): 
    return self._items[row] 

Ve böyle bir model:

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

TypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance 

olsun yöntemi şöyle

Sorun aslında QObject'i alma şeklim ile ilgisiz. Python'dan QML dönüşümüne gerçekten benziyor. Dönüştürücü, halihazırda geçirilmiş referansların bir listesini tutar ve bir şekilde eşitlemeden çıkar.

Şimdi hatayı gösteren çok az örnek var. Kaynağı https://github.com/sturmf/python_samples.git'dan alın ve pyqt_combobox_qabstractlistmodel klasörüne gidin. Orada python3 main.py ile örnek başlatın. Gösterilen ComboBox'ta, three numaralı öğeyi seçebileceğinizi ancak one öğesinin konsolda bir hata verebileceğini görebilirsiniz. Bunun nedeni, maddenin birinci kez Python'dan QML'ye geçmesiydi ve ikinci kez çalışmadı.

Belki dönüştürülen QObject, QML tarafında toplanan çöpleri topladı?

cevap

5

Yani, QML tarafındaki çöpler QML'ye teslim ettikten sonra nesneleri topladım. Nedeni, bu QObjects'i asla bir ebeveyn kurmamam.