Аз съм начинаещ в Qt и създавам приложение от:
- Използвайки QML за дизайн на View,
- Използване на python главно за частта за контролер и модел.
Следователно QML трябва да взаимодейства с обектите на Python.
Моят проблем: Създадох QAbstractListModel
в python чрез следния (опростен) код:
class MyList(QAbstractListModel):
_myCol1 = Qt.UserRole + 1
_myCol2 = Qt.UserRole + 2
def __init__(self, parent=None):
super().__init__(parent)
self.myData= [
{
'id': '01',
'name': 'test1',
},
{
'id': '02',
'name': 'test2',
}
]
def data(self, index, role=Qt.DisplayRole):
row = index.row()
if role == MyList._myCol1:
return self.myData[row]['id']
if role == MyList._myCol2:
return self.myData[row]['name']
def rowCount(self, parent=QModelIndex()):
return len(self.myData)
def roleNames(self):
return {
MyList._myCol1: b'id',
MyList._myCol2: b'name'
}
def get(self, index):
# How to implement this?
Кодът по-горе работи добре и излагането на списъка от python на QML чрез QQmlApplicationEngine
и rootContext().setContextProperty(...)
работи (използвах отговора от как да вмъквам/редактирам QAbstractListModel в актуализации на python и qml автоматично? и документите на Qt за Python като ориентация).
Ако използвам QML ListModel
, мога да използвам функцията object get(index)
, както е описано в документите https://doc.qt.io/qt-5/qml-qtqml-models-listmodel.html. Въпреки това:
- Как мога да осъществя достъп до конкретен елемент в инстанциирания MyList от QML, тъй като бих направил този елемент с метода
get(index)
, ако щеше да бъде естествен QML ListModel? - Как да внедрим метода
get(index)
?
Все още търся и очаквам решение, отнасящо се до python и QML. Благодаря за вашата помощ!