用于QML的PyQt5中的QList <t>之类的属性

时间:2019-05-25 15:49:19

标签: python pyqt pyqt5 qlist

在C ++中,我经常使用QList<QObject*>QList<QString>作为不可变属性,以导出到qml代码进行演示。但是,我在pyqt5中找不到如何执行此操作的方法,该文档中没有关于模板化类的任何内容。

QAbstractItemModelQAbstractListModel,但是它们太多了。也有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")]

2 个答案:

答案 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列表。