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?