2016-11-13 7 views
0

У меня возникают проблемы с представлением моей модели данных C++ в ListView в QML. QML не может найти свойства каждой строки.Интеграция собственной модели данных QT C++ с 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); 
    ... 
} 

И у меня есть класс модели, которая хранит объекты Идентичность:

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().

Где может быть проблема?

ответ

1

Обеспечение роли в модели должным образом реализованы, все, что вам нужно сделать, это:

Text { text: "Email: " + email}.

Если это не работает, то определенно у вас возникла проблема с реализацией модели.

Как отметил в комментариях GrecKo, формат model.role на самом деле возможен, но на самом деле не нужен, если у вас нет конфликтов имен.

+0

если я делаю это, как вы говорите, я получаю ошибку «ReferenceError: email is not defined». Я уже пробовал это – Nulik

+0

Акцент на «обеспечение ролей в модели должным образом реализован». – dtech

+0

Я думаю, что проблема с делегатом. Делегат не вызывает метод data() и index(), поэтому в классе модели ничего не выполняется. У меня есть точки останова повсюду в нем, но нет вызовов – Nulik

0

Ваша модель либо неправильно сопоставляет имя роли с значением роли, то есть отсутствующую или неправильную реализацию QAbstractItemModel::roleNames(), или ваш метод data() неправильно обрабатывает значения роли.

Поскольку ваш объект данных, похоже, QObject, у вас может быть одна роль модели, которая возвращает объект данного индекса и вместо этого будет обращаться к свойствам этого объекта.

+0

да, это именно то, что произошло! – Nulik

 Смежные вопросы

  • Нет связанных вопросов^_^