在我的ListView
中,我拥有这些:
ListView{
id: listView
Layout.fillHeight: true
Layout.fillWidth: true
model: addContext.newLease.receivables
delegate: ItemDelegate{
width: parent.width
topPadding: 0
bottomPadding: 0
contentItem: RowLayout{
Text{
text: modelData.headId //mainContext.receivableHeads....name
Layout.preferredWidth: parent.width / 2
}
Text{
text: modelData.amount
horizontalAlignment: Text.AlignRight
}
PathButton{
pathData: C.minusIcon
Layout.alignment: Qt.AlignRight
hasToolTip: false
onClicked: addContext.removeReceivable(listView.currentIndex)
}
}
}
}
有了这个,我有一些Layout
问题,稍后我会再问。在contentItem
的第一个Text
中,我有一个数字headId
,它在ListView
中显示了该数字,并带有我要的modelData.headId
改为显示name
。模型addContext.newLease.receivables,
不包含name
,它仅具有以下属性:
class Receivable : public QObject{
Q_OBJECT
Property(int, leaseId)
Property(int, headId)
Property(int, amount)
};
与name
对应的 headId
在mainContext.receivableHeads
中,它具有以下属性:
class Head : public QObject{
Q_OBJECT
Property(int, id)
Property(int, controlId)
Property(QString, name)
Property(QString, description)
};
我想通过将name
的{{1}}与mainContext.receivableHeads
的{{1}}匹配来从headId
获得modelData
。
编辑
此:
id
与此同时:
mainContext.receivableHeads
Thomenson建议的有效。我的Q_INVOKABLE QString headName(int headId){
foreach(auto head, mvm->receivableHeads()){
if(head->id() == headId)
return head->name();
}
}
是一个很小的列表,因此它是javascript的不错选择,是否有内置的javascript函数可以做到这一点?
好吧,我不知道javascript这样的功能:
text: addContext.headName(modelData.headId) //modelData.headId //mainContext.receivableHeads.indexOf(modelData).name
也可以!