将python的对象列表传递给qml

时间:2017-09-24 07:27:54

标签: python pyqt qml pyqt5

我正在尝试将对象列表从python传递给qml。在qml方面,我将解释这些信息并使用repeater和listmodel元素,以类似的方式在表格中显示这些信息。

如果我只是传递一个对象或一个整数列表,我可以读取qml方面的信息。但在尝试传递对象列表时则不然。我怎样才能读取qml端的对象列表?我必须使用不同的属性吗?

下面是我到目前为止:

context.setContextProperty("dicomFiles", displayComponent)

以下列方式向qml方面公开: HanaContainer { Text { id: display text: "no signal detected yet" } Component.onCompleted: { console.log(dicomFiles.getDicomFilesList[1]) // prints File(0x7f8a6d454c70) console.log(dicomFiles.getDicomFilesList[1].fileName) // prints undefined } }

这就是我在qml方面阅读列表的方式:

for (var i:int = 0; i < 34; i++)
{
    btns[i].addEventListener(MouseEvent.CLICK, onClick);
}

function onClick(e:MouseEvent):void
{
    // Get reference to the clicked button.
    var aBut:DisplayObject = e.currentTarget as DisplayObject;

    // Option 1: figure its index within the list.
    var anIndex:int = btns.indexOf(aBut) + 1;

    // Option 2: figure its index from the button's name.
    var anIndex:int = int(aBut.name.substr(4));

    // Go to the relevant frame.
    OpenDetail(anIndex);
}

ps:对Qml和Qt5来说是全新的。如果我在我的概念中犯了任何根本错误,请告诉我

1 个答案:

答案 0 :(得分:2)

要在qml中显示属性,这必须是属性,为此您应该使用pyqtProperty,如下所示:

class File(QObject):
    def __init__(self, fileName, commentsStatus, diagnosisStatus, parent=None):
        QObject.__init__(self, parent)
        self._fileName = fileName
        self._commentsStatus = commentsStatus
        self._diagnosisStatus = diagnosisStatus

    @pyqtProperty(str)
    def fileName(self):
        return self._fileName

    @pyqtProperty(bool)
    def commentsStatus(self):
        return self._commentsStatus

    @pyqtProperty(bool)
    def diagnosisStatus(self):
        return self._diagnosisStatus

如果我们想成为可编辑的implementetar setters,上面的内容将使该属性只能读取,例如:

@fileName.setter
def fileName(self, value):
    self._fileName = value