如何使用QML从代表外部获取模型中的数据(从QAbstractItemModel
分类)?
我试过这样:
Identities {
id: identities_model
}
...
console.log(identities_model[0].email)
但是我收到了错误:
TypeError: Cannot read property 'email' of undefined
我的data()
方法定义如下:
QVariant Identities::data(const QModelIndex &index, int role) const {
int row_num;
row_num=index.row();
if (role==EmailRole) {
QList <QString> qlist;
qlist=identities_map.keys();
if (row_num>=qlist.size()) return (QVariant());
return QVariant(qlist.at(row_num));
}
if (role==PasswordRole) {
QList <QString> qlist;
qlist=identities_map.keys();
if (row_num>=qlist.size()) return (QVariant());
Identity *identity;
identity=identities_map.value(qlist.at(row_num));
return QVariant(identity->password());
}
if (role==Qt::DisplayRole) {
return(QVariant());
}
}
我尝试调试(放置一些断点),但无法从QML拦截对我的模型的Identities::data()
或Identities::index()
的任何调用。我应该如何在委托之外的模型中访问数据? (特定行,特定角色)当我使用委托时,我的模型完全正常。
答案 0 :(得分:2)
只需为模型实现Identity * at(int index)
槽或可调用函数。然后identities_model.at(0).email
应该有用。
这里的角色没有发挥作用,因为Identity
是QObject
派生的,它应该将它们作为属性实现,以便在QML中使用。角色仅适用于视图委托。如果它不是QObject
派生的,您可以使用Q_GADGET
为该类型生成元信息,以便可以从QML访问它。
如果您的模型是JS数组,[]
运算符将起作用。此外,JS不会抱怨你的模型没有[]
运算符,它只会给你一个undefined
,因为它是未定义的。就像这样的事情一样:
var v = 3
console.log(v[0])
JS不支持运算符重载,也不支持在C ++端实现的任何运算符。仅限功能。