Występuję niejasny problem (błąd?) Z mojego programu QML Python3. Zaimplementowałem QAbstractListModel z niestandardową metodą pobierania, aby uzyskać podstawowe elementy QObject. W chwili, gdy starają się uzyskać ten sam Python QObject w dwóch różnych miejscach w QML uzyskać:Dostęp Python QObject z QML nie można przekonwertować na drugie wywołanie
metodaTypeError: unable to convert a Python 'QMyItem' object to a C++ 'QObject*' instance
get wygląda następująco:
@pyqtSlot(int, result=QMyItem)
def get(self, row):
return self._items[row]
a model tak:
ComboBox {
model: mymodel
textRole: 'name'
onActivated: mymodel.item = model.get(index)
onModelChanged: currentIndex = getCurrentIndex(mymodel, mymodel.item)
}
Problem jest w rzeczywistości niezwiązany ze sposobem pobierania elementu QObject. Wygląda na to, że chodzi o konwersję Python do QML. Jakby konwerter zachował listę już przekazanych referencji i jakoś się zsynchronizował.
Mam teraz minimalną próbkę, która pokazuje błąd. Uzyskaj źródło z https://github.com/sturmf/python_samples.git i przejdź do folderu pyqt_combobox_qabstractlistmodel
. Tam zacznij próbkę z python3 main.py
. W pokazanym ComboBox zobacz, czy możesz wybrać pozycję three
, ale pozycja one
daje błąd na konsoli. Powodem jest to, że element pierwszy był już raz przeszedł z Python do QML i nie działa po raz drugi.
Może przekonwertowany obiekt QOb dostał jakoś śmieci zebrane po stronie QML?