2013-02-27 3 views
4

매우 간단한 예제 QListView을 사용자 지정 QAbstractListModel으로 만들었습니다. QListView이 표시되지만 비어 있습니다.QAbstractListModel이있는 QListView가 빈 목록을 표시합니다.

내가 뭘 잘못하고 있니?

코드 :

#include <QListView> 
#include <QAbstractListModel> 
#include <QApplication> 

class DataModel: public QAbstractListModel 
{ 
public: 
    DataModel() : QAbstractListModel() {} 
    int rowCount(const QModelIndex & parent = QModelIndex()) const { return 2; } 
    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const 
    { 
     return "a"; 
    } 
}; 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv, true); 
    QListView *lv = new QListView(); 
    DataModel d; 
    lv->setModel(&d); 
    lv->show(); 
    app.setMainWidget(lv); 
    app.exec(); 
} 

감사합니다!

은 이전 코드에 대한 수정 프로그램은 QListView에 모델의 부모를 설정하는

입니다 :

DataModel d(lv); 

하지만이 모델은 레퍼런스를 가지고있는 경우 모델/뷰 독립을하는 질문을 제기 보기에?

이 모델을 두 가지 다른보기에서 사용하려면 어떻게해야합니까?

답변

9

role = Qt :: DisplayRole 인 경우에만 메서드 데이터가 "a"를 반환해야합니다. 그렇지 않으면 모든 역할에 대해 "a"를 리턴합니다.

그래서, 간단한 테스트를 추가하고 작동합니다 :

QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const 
{ 
    if (role == Qt::DisplayRole) { 
     return "a"; 
    } 
    return QVariant(); 
} 
+0

이 완료,하지만 여전히 모든 항목 :( –

+1

것이 중요하다 표시되지 않는 데이터() 잘못된 QVariant() 확인을 반환합니다. 끝에 QVariant()를 잊지 않았다면 –

+0

QVariant()를 반환합니다. 여전히 문제가 있다고 생각하지만 해결했습니다. 원래 게시물의 버전을 확인하십시오. –

관련 문제