2016-05-16 7 views
7

Ich stoße auf ein obskures Problem (Bug?) Mit meinem Python3 QML-Programm. Ich habe ein QAbstractListModel mit einer benutzerdefinierten Methode get implementiert, um zu den zugrunde liegenden QObject-Elementen zu gelangen. In dem Moment, ich versuche, das gleiche Python QObject an zwei verschiedenen Stellen in QML zu bekommen, erhalte ich:Zugriff auf Python QObject von QML kann beim zweiten Aufruf nicht konvertiert werden

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

Die get-Methode sieht wie folgt aus:

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

Und das Modell wie folgt aus:

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

Das Problem ist eigentlich unabhängig von der Art, wie ich das QObject abrufen. Es scheint wirklich um die Umwandlung von Python in QML zu gehen. Als ob der Konverter eine Liste bereits übergebener Referenzen führt und irgendwie nicht mehr synchron ist.

Ich habe jetzt eine minimale Probe, die den Fehler zeigt. Holen Sie sich die Quelle von https://github.com/sturmf/python_samples.git und gehen Sie in den Ordner pyqt_combobox_qabstractlistmodel. Dort starten Sie die Probe mit python3 main.py. In der gezeigten ComboBox sehen Sie, dass Sie Element three auswählen können, aber Element one gibt Ihnen einen Fehler auf der Konsole. Der Grund dafür ist, dass der erste Punkt bereits einmal von Python an QML übergeben wurde und nicht ein zweites Mal funktioniert.

Vielleicht hat das konvertierte QObject irgendwie Müll auf der QML-Seite gesammelt?

Antwort

5

Also das Problem war, dass die QML Seite Müll meine Objekte gesammelt, nachdem ich sie an QML übergeben. Der Grund ist, dass ich nie ein Elternteil für dieses QObjects gesetzt habe.

Verwandte Themen