2016-05-16 41 views
7

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

metoda
TypeError: 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?

Odpowiedz

5

Problem polegał na tym, że śmieci po stronie QML zbierały moje obiekty po przekazaniu ich do QML. Powodem jest to, że nigdy nie ustawiłem rodzica dla tego QObjects.