我在将我的C ++数据模型暴露给QML中的ListView时遇到了问题。 QML找不到每一行的属性。
我有这门课(QT 5.7):
class Identity : public QObject
{
Q_OBJECT
Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged);
Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged);
...
}
我有一个存储Identity对象的模型类:
class Identities: public QAbstractItemModel {
Q_OBJECT
private:
QMap<QString,Identity*> identities_map;
...
}
我也在main.cpp注册:
qmlRegisterType<Identities>("project_identities",1,0,"Identities");
我的main.qml有以下定义:
Identities {
id: identidades
}
ListView {
anchors.fill: parent
model: identidades
delegate: Row {
Text { text: "Email: " + model.email}
}
}
现在的问题是,当我显示电子邮件和密码列表时,这是输出:
Email: undefined
我缺少什么? 当我使用调试器调试代码时,唯一正在执行的方法是Identities :: rowCount()。不执行Identities :: index(),也不执行Identities :: data()。
问题出在哪里?
答案 0 :(得分:1)
正确实施模型中的角色,您只需要:
int compare_node( struct link_node *n1, struct link_node *n2)
{
return strcmp(n1->node_str, n2->node_str);
}
。
如果这不起作用,那么你的模型实现肯定存在问题。
正如GrecKo在评论中指出的那样,格式Text { text: "Email: " + email}
实际上是可行的,但除非你有名称冲突,否则不是必需的。
答案 1 :(得分:0)
您的模型要么没有正确地将角色名称映射到角色值,即QAbstractItemModel::roleNames()
的遗漏或错误实施,或者您的data()
方法未正确处理角色值。
由于您的数据对象似乎是QObject
,因此您可以拥有一个模型角色,该角色返回给定索引的对象并改为访问该对象的属性。