В моем 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
, НО я спрошу об этом позже. Здесь, в первом Text
contentItem
, у меня есть номер 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
из mainContext.receivableHeads
, сопоставив headId
из modelData
с id
из mainContext.receivableHeads
.
EDIT
Это:
Q_INVOKABLE QString headName(int headId){
foreach(auto head, mvm->receivableHeads()){
if(head->id() == headId)
return head->name();
}
}
вместе с этим:
text: addContext.headName(modelData.headId) //modelData.headId //mainContext.receivableHeads.indexOf(modelData).name
, как было предложено Thomenson , работает. Мой receivableHeads
- крошечный список, поэтому он хороший кандидат на javascript, есть ли встроенная функция javascript, которая делает это?
Ну, я не знал, что javascript работает так:
text: {
for(var i =0; i < mainContext.receivableHeads.length; i++){
if(mainContext.receivableHeads[i].id === modelData.headId)
return mainContext.receivableHeads[i].name
}
}
тоже работает!