首页 > 解决方案 > 如何实现类似于 WPF 的 IValueConverter 的功能

问题描述

在我的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,它在其中显示该数字ListViewmodelData.headId但我想显示该数字name。该模型addContext.newLease.receivables,不包含name,它只有以下属性:

class Receivable : public QObject{
    Q_OBJECT
    Property(int, leaseId)
    Property(int, headId)
    Property(int, amount)
};

name对应headIdmainContext.receivableHeads其中具有以下属性的 is:

class Head : public QObject{
    Q_OBJECT
    Property(int, id)
    Property(int, controlId)
    Property(QString, name)
    Property(QString, description)
};

我想通过将of与of匹配来获得namefrom 。mainContext.receivableHeadsheadIdmodelDataidmainContext.receivableHeads

编辑

这个:

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
    }
}

也有效!

标签: qtqml

解决方案


推荐阅读