在C ++中,我经常使用QList<QObject*>
或QList<QString>
作为不可变属性,以导出到qml代码进行演示。但是,我在pyqt5中找不到如何执行此操作的方法,该文档中没有关于模板化类的任何内容。
有QAbstractItemModel
和QAbstractListModel
,但是它们太多了。也有QStringListModel
,但它并不适用于所有内容。
还有一个QQmlListProperty
可以在Python中很好地工作,但是在C ++代码中很难操作。
例如,我有这个QML组件:
Row {
ListView {
model: pyModel.urls
delegate: Label {
text: modelData
}
}
ListView {
model: pyModel.objects
delegate: Label {
text: modelData.text
}
}
PyModel {
id: pyModel
}
}
我应该在python属性中编写哪些类型的代码才能起作用?
class PyModel(QObject):
def __init__(self, parent=None):
super().__init__(parent)
@pyqtProperty('???', constant=True)
def urls(self):
return [QUrl("file:///etc/shadow")]
@pyqtProperty('???', constant=True)
def objects(self):
return [OtherObject("someData")]
答案 0 :(得分:1)
在PyQt5中,您通常可以使用简单的Python列表来替换SELECT *
FROM table
WHERE filter = IF({{checkbox1.value}} = TRUE,0,1 OR IS NULL)
ORDER BY order DESC
;对于QList
,您可以定义如下:
pyqtProperty
答案 1 :(得分:1)
在一些对我有用的邮件列表中找到了一段代码:
@pyqtProperty('QList<QUrl>')
def someProperty(self):
return self._someList
从qml接受数据时,此qlist的工作方式类似于python列表。