2014-02-10 3 views
5

Qt의 설명서가 조금 부족해 보이지만 QLists를 ListView의 모델로 사용하려고합니다. 것은 계층 구조를 나타냅니다. 항목을 클릭 할 때마다 모델이 다른 것과 교환됩니다. QML은 C++ 콜백에서 가져옵니다.QML을 사용하는 QML ListView <QObject*>을 모델로 사용합니다.

class MyObject : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(QString   name  READ getName WRITE setName) 
    Q_PROPERTY(QString   subtitle READ getSubtitle) 
    Q_PROPERTY(QList<QObject*> descent READ getChildren NOTIFY childrenUpdated) 
    ... 
} 

그리고 어떻게 QML에서 사용 :

이 목록 항목을 나타내는 객체입니다

ListView { 
    id: list_view 
    model: myModel 
    anchors.fill: parent 
    delegate: Item { 
    id: row 
    height: 50 
    anchors.left: parent.left 
    anchors.right: parent.right 

    MouseArea { 
     anchors.fill: row 
     onClicked: { 
     list_view.model = descent; 
     } 
    } 

    Column { 
     Text { text: name } 
     Text { text: subtitle } 
    } 
    } 
} 

은 "myModel"모델과 같이, 메인에 설정됩니다

context->setContextProperty("myModel", QVariant::fromValue(folder.getChildren())); 

처음 ListView가 나타나면 myModel을 모델로 사용하며 작동합니다. 그러나 항목을 클릭 할 때마다 ListView는 예상되는 항목의 정확한 수를 만듭니다 ... 그러나 속성을 읽을 수는 없습니다!

ListView는 어떻게 생성해야하는지 정확히 알지만 속성을 볼 수 없습니까?

답변

5

나는 이것이 당신이 관찰하고있는 올바른 행동이라고 생각합니다. QML은 QList의 요소 수를 알고 있지만, 지금까지 name 및 수는 없습니다 subtitle 그들을 쿼리로 descent 때문에 ListView::model property의 QML 문서에서 ListView::model

의 제약을 준수하지 않는 :

모델은보기를 에있는 항목을 만드는 데 사용되는 데이터 집합을 제공합니다. 모델은 ListModel, XmlListModel 또는 VisualItemModel을 사용하여 QML에서 직접 만들거나 C++ 모델 클래스에서 제공 할 수 있습니다. C++ 모델 클래스를 사용하는 경우 QAbstractItemModel 의 하위 클래스이거나 단순한 목록이어야합니다.

그래서 그런 측면에서, 당신은 포함하는 하나의 QString, int는, 등등 ... 또는 그것을 구현 QAbstractItemModel으로 나는 간단한 데이터를 포함하는 수단을 생각하는 간단한 목록을 할 descent을 변경해야 하나 QObjects의 목록

+0

QAbstractItemModel에 대해 들었고 그렇게하지 않으려 고했습니다. 간단한 데이터 (QString 전용)로 작업하고 있기 때문에 '괜찮은 것'을 살펴볼 것입니다! 감사! – Michael

관련 문제