【发布时间】:2014-11-29 10:38:40
【问题描述】:
我想编写 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);
}
}
一切看起来都很好,但是当我尝试从模型项调用 format 时,Qt 向我发送以下错误
Property 'format' of object QQmlDMListAccessorData(0x8e3bf78) is not a function
调用示例格式:
Repeater {
model: columnModel
Text {
text: model.format([SOME USEFUL DATA])
}
}
另一方面,如果我直接从 list 调用 format 效果很好。 所以我的问题是如何以 format 或其他函数在从模型调用时正常工作的方式填充模型?
【问题讨论】:
-
这对我来说几乎是个谜,我不明白为什么在 QML 中从列表中取回数据如此困难。但是,您可能会发现这很有用(我确实如此):stackoverflow.com/a/5239864/1858225