QML

2016-11-13 1 views
0

내가 QML에서 ListView에 내 C++ 데이터 모델을 노출하는 데 문제로 자신의 QT C++ 데이터 모델을 통합. QML은 각 행의 속성을 찾을 수 없습니다.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는 이러한 정의가

Email: undefined 

내가 무엇을 놓치고 : 나는 이메일과 암호 목록을 표시 할 때

Identities { 
    id: identidades 
} 
ListView { 
    anchors.fill: parent 
    model: identidades 
    delegate: Row { 
     Text { text: "Email: " + model.email} 
    } 
} 

지금,이 출력 문제입니다? 디버거로 코드를 디버깅 할 때 실행되는 유일한 방법은 Identities :: rowCount()입니다. Identities :: index()도 실행되지 않으며 Identities :: data()도 실행되지 않습니다.

어디에서 문제가 발생할 수 있습니까? 모델의 역할을 제공

답변

1

이 제대로 구현되어, 당신이 할 필요가있다 :

Text { text: "Email: " + email}. 그래도 문제가 해결되지 않으면

는 다음 확실히 당신은 당신의 모델 구현에 문제가 있습니다.

GrecKo이 코멘트에 언급 한 바와 같이 당신이 이름이 충돌하지 않는 한, 형식 model.role 실제로 정말 필요한 것이 가능하지만,하지 않습니다.

+0

는 말처럼 내가 할 경우 내가 얻을 : 오류 "ReferenceError가 메일이 정의되어 있지 않습니다." 나는 그것을 이미 시도했다 – Nulik

+0

"모델에서 역할을 제공하는 것이 적절하게 구현된다"는 부분을 강조한다. – dtech

+0

문제는 위임자와 같다고 생각합니다. 델리게이트는 data() 또는 index() 메서드를 호출하지 않으므로 모델 클래스에서 아무 것도 실행되지 않습니다. 어디서나 중단 점이 있지만 아무런 호출이 없습니다. – Nulik

0

모델에 역할 이름을 올바르게 매핑하지 않았습니다. 즉, 누락되었거나 구현이 잘못되었거나 QAbstractItemModel::roleNames()이거나 data() 메서드가 역할 값을 올바르게 처리하지 못합니다.

데이터가 이제 QObject의 것 같다 개체입니다 주어진 인덱스의 객체를 반환하는 하나의 모델 역할을 대신 객체의 속성에 액세스 할 수 있습니다.

+0

예, 정확히 무슨 일이 일어 났습니까! – Nulik