2017-01-09 1 views
1

많은 항목이있는 사용자 정의 트리 모델이 있습니다. 최상위 레벨 아래 첫 번째 레벨에는 1000000 개 이상의 항목이 있습니다. QTreeView에서이 레벨을 확장하면 항목이 보이지 않더라도이 항목 각각에 대해 model.hasChildren()이 호출됩니다 (아래로 스크롤해야 볼 수 있습니다). 문제는 내 함수 hasChildren()이 특히 백만 번 호출 될 때 약간의 시간이 걸린다는 것입니다 (PySide/PyQt에서 약 10 초 소요). 내 질문은 다음과 같습니다.QTreeView는 보이지 않는 항목에 대해서도 QAbstractItemModel :: hasChildren()을 호출합니다.

1) 항목이 확장 가능해야하는지 (어린이가있는 경우) 여부를 알아야하기 때문에 hasChildren()이 표시 항목에 대해 호출됨을 이해합니다. 그러나 왜 보이지 않는 항목 (가시 범위 안에 있지 않고 아래로 스크롤 한 후에 만 ​​볼 수있는 항목)이 필요합니까? 내보기에서 그것은 항목이 보이게 될 때만 호출되어야합니다. 나는 somethig를 놓치고 있냐?

2)이 문제를 해결하려면 어떻게합니까?

+0

[모델 서브 클래 싱 참조] (https://doc.qt.io/qt-4.8/model-view-programming.html#model-subclassing-reference)의 "모델 데이터의 지연 채우기"섹션을 읽었습니다. ? – ekhumoro

답변

0

pyqt docs에 대해 fetchMore/canFetchMore를 재정의해야 할 수 있습니다. 기본적으로 루트를 확장하면 fetchMore()가 호출되며 데이터 항목의 하위 집합 만 반환됩니다. 사용자가 스크롤 할 때 뷰는 더 많은 정보를 가져올 수 있는지 루트에게 묻습니다. yes라고 대답하면 fetchMore()가 호출되고 모델에서 더 많은 항목을 반환 할 수 있습니다. 이렇게하면 가져온 트리 항목에서만 hasChildren()이 호출됩니다.

+0

데이터 가져 오기를 시도했지만 점진적으로 데이터가 실제로 이상하게 작동합니다. 나는 그것과 관련된 또 다른 질문을 제기했다 : http://stackoverflow.com/questions/41684064/canfetchmore-and-fetchmore-are-working-as-expected –

관련 문제