나는 또한이 문제를 가지고 있었고, Qt 위젯 렌더링 인 바다를 샅샅이 뒤지는 데 많은 시간을 보냈다. 궁극적으로, 나는 너와 마찬가지로 QListView의 일괄 처리로 문제를 추적했다. 일괄 처리가 활성화되면 Qt는 내부 타이머를 작동시켜 기본 스크롤보기의 점진적 레이아웃 조정을 수행합니다. 이러한 점진적 레이아웃 중에는 스크롤 막대가 표시 될 때 업데이트 영역이 올바르게 계산되지 않습니다 (크기가 너무 커서 스크롤 위젯 자체가 차지하는 영역을 고려하지 않습니다). 결과적으로 뷰포트 업데이트로 이어지는 잘못된 업데이트 영역이 생겨서 ListViewItem을 렌더링하지 않고 전체 클라이언트 영역을 지우는 불행한 부작용이 있습니다.
일괄 처리가 완료되면 마지막 뷰포트 업데이트가 스크롤 막대를 사용하여 레이아웃 지오메트리를 올바르게 계산하고 올바른 업데이트 영역을 생성합니다. 그런 다음 목록의 보이는 요소가 다시 그려집니다.
목록의 항목 수가 증가하면 (배치 크기에 비례하여) 동작이 심해집니다. 예를 들어, 목록이 500 개에서 50000 개까지 늘어나고 일괄 처리 크기가 50 인 경우 트리거 된 "잘못된 다시 칠하기"이벤트 수가 비례하여 증가하여보기가 눈에 띄게 깜박입니다. :(
이 증가 (실패) 뷰포트 업데이트가 당신이 설명 스크롤 핸들 위치에 명백한 spazmodic 동작이 발생할 것으로 보인다.
이 문제의 근본이였습니다 "해킹"에 관한 나타납니다 난 당신이 QListView :: doItemsLayout를 (우선) 및 스크롤 막대를 제대로 처리하는 자신의 일괄 처리를 제공 할 수있다 생각하지만, 개인적으로 내가 너무 늙었 어
// showing the scroll bars will trigger a resize event,
// so we set the state to expanding to avoid
// triggering another layout
QAbstractItemView::State oldState = state();
setState(ExpandingState);
: 여기에 댓글로 QListView :: doItemsLayout()에 추가 다른 사람의 똥을 치우는 게으른 게 아닌가. 문제를 완전히 해결했다. 깜박임없는 렌더링을 완벽하게 지원하고 기대했던 스크롤바 동작과 사랑합니다. 예.
이 문제의 근본 원인을 찾아 주셔서 감사합니다. 시간이 있고 게으른 느낌이 들지 않으면 버그 보고서를 제출할 것입니다 :) –
아주 좋은 답변 !! – Ashish