通过索引从 QML 中的 C++ 模型获取数据
Getting data by index from the C++ model in QML
如何使用 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()
调用。我应该如何在委托之外访问模型中的数据? (特定行,特定角色)当我使用委托时,我的模型工作得很好。
只需为模型实现 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++ 端实现的任何运算符。仅限函数。
如何使用 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()
调用。我应该如何在委托之外访问模型中的数据? (特定行,特定角色)当我使用委托时,我的模型工作得很好。
只需为模型实现 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++ 端实现的任何运算符。仅限函数。