Я новичок в Qt, и я создаю приложение:
- Использование QML для дизайна представления,
- Использование 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. Спасибо за вашу помощь!