我想编写 TableView 的调优版本(Qt 包中的 TableView.qml)。我有ColumnDescriptor.qml与列定义:
Item {
property string title
property var formatDelegate: null
.... (other property definition)
function format(val) {
if (formatDelegate != null)
return formatDelegate(val);
else
return val;
}
}
上面的代码定义了一组属性和函数format(val)
,如果formatDelefate
设置了则调用格式值。
在主表中,我使用list存储预定义列定义(临时)和ListModel存储最终列定义(后者在其余实现中比list更有用)
列表示例:
property list<ColumnDescriptor> colDefines: [
ColumnDescriptor {
title: qsTr("col1")
},
ColumnDescriptor {
title: qsTr("col2")
formatDelegate: function(val) { return "!" + val}
}
]
填充ListModel ( id: columnModel
):
Component.onCompleted: {
for(var i = 0; i < colDefines.length; ++i)
{
var col = colDefines[i];
...(some calculation)
columnModel.append(col);
}
}
一切看起来都很好,但是当我尝试从模型项调用格式时,Qt 向我发送以下错误
Property 'format' of object QQmlDMListAccessorData(0x8e3bf78) is not a function
调用格式示例:
Repeater {
model: columnModel
Text {
text: model.format([SOME USEFUL DATA])
}
}
另一方面,如果我直接从列表中调用格式,则效果很好。所以我的问题是如何填充模型以使格式或其他函数在从模型中调用时可以正常工作?