在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());
}
}
我试图调试(放一些断点),但无法拦截任何调用Identities::data()
或Identities::index()
对我的模型从QML。如何在委托之外访问模型中的数据?(特定行,特定角色)当我使用委托时,我的模型工作得非常好。
只需为模型实现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++端实现的操作符。功能。
相关文章:
- QTableView:endMoveRows在模型中重置水平页眉大小
- 将IBM Rhapsody模型集成到VS 2019中
- 旋转模型矩阵时的形状失真
- 成员函数调用和C++对象模型
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 打印 ONNXRUNTIME::图形没有模型
- C++内存模型和位字段的最大序列
- 使用SIR模型的疾病爆发模拟
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 如何在 ECS 模型中组织实体?
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- Libtorch:如何加载ONNX模型?
- 使用 assimp 加载模型 - 不需要提升?
- 如何将经过训练的机器学习模型保存在python中并将其加载到C++中进行预测?
- C++内存模型中的确切规则阻止在获取操作之前重新排序
- 如何更改古罗比C++模型中的目标值系数
- 如何在 openGL 中围绕全局轴旋转模型?
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- ASIMP 模型加载不会加载所有网格
- 平方模型为零,阶乘模型问题