Pergunta

Estou usando o PyQt 4.4.

É melhor mostrado usando algumas fotos.Todos os nós devem ter folhas de 0 a 99.Eles estão sendo carregados de forma incremental usando canFetchMore() e fetchMore().Mas, por algum motivo desconhecido para mim, isso funciona apenas para o nó raiz.(Imagem 1)

Se eu recolher e expandir um nó, ele carregará 10 valores adicionais.(Imagens 2 e 3)

Também é estranho que carregue 10 valores, já que o código carrega apenas 5 por chamada para fetchMore(), o que significa que é chamado 2 vezes antes que o código pare para carregar mais dados.

Screenshot 1 Screenshot 2 Screenshot 3

Eu escrevi um pequeno exemplo para demonstrar o problema, basta executá-lo com python test.py. http://snipt.org/lLh

Alguém sabe o que causa esse erro?

Foi útil?

Solução

Dei uma olhada na fonte Qt (v4.5, embora não espere muita diferença entre v4.4 e v4.5) para QAbstractItemView e QTreeView, e não acho que eles suportem carregamento lento incremental de nós filhos.

QAbstractItemView não tem noção de árvores, então apenas chama fetchMore() no índice mais alto.Ele chama fetchMore() quando:

  • A geometria é atualizada
  • As barras de rolagem são movidas
  • As linhas são inseridas
  • O item atual é alterado como resultado de uma operação de arrastar e soltar de rolagem automática

QTreeView também chama fetchMore() quando:

  • Um item é expandido (esse é essencialmente o único momento em que ele chama fetchMore() com um índice não raiz)
  • O layout da visualização precisa ser reiniciado, como com expandAll() e collapseAll()

Acho que a melhor solução seria subclassificar QTreeView para fazê-lo chamar fetchMore() nos locais apropriados e com os índices apropriados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top