我正在尝试将对象列表从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来说是全新的。如果我在我的概念中犯了任何根本错误,请告诉我
答案 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