2012-08-31 6 views
2

데이터 트리를 인코딩하기 위해 QAbstractItemModel에서 파생되었지만 QTreeView가 표시되지 않습니다.QTreeView가 데이터를 표시하지 않습니다.

나는 때문에 잘못된 변수 수명의 해결 된 비슷한 질문에 본 답변의 대부분은, 그래서 여기에 모델의 할당에 대한 내 코드입니다 : 건설에

ui.tvHierarchy->setModel(
    new MetaHierarchyModel(
     cutOffExtension(
      fileName.toStdString() 
     ) 
    ) 
); 

모델이 가득 루트 노드를 가져가 데이터에 저장하고 필요에 따라 더 많은 데이터를로드해야합니다 (fetchMore 통해).

나는 호출되는 모든 기능을 출력하기 시작했습니다. roleNames()

columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
hasChildren(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return true 
canFetchMore(QModelIndex(-1,-1,0x0,QObject(0x0)))) 
    return false 
rowCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
hasChildren(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return true 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 
columnCount(QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return 1 
parent(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) ) 
    return QModelIndex(-1,-1,0x0,QObject(0x0)) 
index(0 , 0 , QModelIndex(-1,-1,0x0,QObject(0x0))) 
    return QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) 
data(QModelIndex(0,0,0x987aa0,MetaHierarchyModel(0xa16970)) , 13) 
    return "Metaparticle 1" 

출력 : (나는 내 ​​인내심을 잃어 또는 적어도 때까지)

마지막 네 줄은 다음 영원히 반복
QHash((0, "display")(1, "decoration")(2, "edit")(3, "toolTip")(4, "statusTip")(5, "whatsThis")) 

이 호출 시퀀스의 로그입니다. 루트 데이터를 가져온 것처럼 보였지만 결코 표시되지 않습니다. 마지막 매개 변수 data (int role)의 값이 13이며,이 값은 역할로 정의되지 않습니다 (여전히 유효한 문자열을 무조건 돌려줍니다).

구현시 놓친 부분이 있습니까?

+0

'data' 함수에서 값을 반환 할 때 가능한 한 인색하기를 원합니다. [the docs] (https://qt-project.org/doc/qt-4.8/qt.html#ItemDataRole-enum)를 체크하면, 역할 13이'Qt :: SizeHintRole'임을 알 수 있습니다. 문자열이 반환 될 때보기가 오히려 혼란스러워지고 있다고 상상해보십시오! –

+0

@XavierHolt 네 말이 맞아. DisplayRole과'QVariant()'에서만 리턴 할 때 작동하지 않는 대신에 이것을 변경했습니다. 아마 나는 그때 또 다른 오류가 있었고 지금은이 문제를 줄곧 가지고있었습니다. 답변을 올리시겠습니까? 올바르게 표시 할 수 있습니까? – Nobody

+0

좋아요! 기쁜 마음으로 - 잠시 후에 답변을 드리겠습니다. –

답변

6

QAbstractItemModel::data 함수는 반환하는 데이터와 가능한 한 인색해야합니다. display role과 열 번호에 정확히 일치하는 데이터 만 반환해야합니다. 다른 모든 경우에는 유효하지 않은 QVariant 만 반환하면됩니다 (기본 생성자를 호출하기 만하면됩니다). 그러면보기 위젯은 누락 된 값을 적절한 기본값으로 채 웁니다.

관련 문제