如何实现类似于WPF的IValueConverter的功能

时间:2020-07-10 15:18:01

标签: qt qml

在我的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对应的

headIdmainContext.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 

也可以!

0 个答案:

没有答案