QML的PyQt5中类似QList<T>的属性

2024-04-19 09:52:50 发布

您现在位置:Python中文网/ 问答频道 /正文

<>在C++中,我经常使用^ {CD1>}或^ {CD2>}作为不可变属性导出到QML代码中进行演示。但是,我在pyqt5中找不到如何做到这一点,文档中没有任何关于模板化类的内容。你知道吗

QAbstractItemModelQAbstractListModel,但它们太陈词滥调了。也有QStringListModel,但并不适用于所有情况。你知道吗

还有一个{{CD6}},它在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")]

Tags: 代码textselfmodel属性objectsdefqml
2条回答

在PyQt5中,通常可以使用一个简单的Python列表来替换QList;在pyqtProperty的情况下,可以如下定义它:

@pyqtProperty(list)
def someProperty(self):
    return self._someList

在某个邮件列表中找到一段对我有用的代码:

@pyqtProperty('QList<QUrl>')
def someProperty(self):
    return self._someList

当接受来自qml的数据时,这个qlist就像python列表一样工作。你知道吗

相关问题 更多 >