22 de março de 2010

Alinhando uma coluna à direita numa QTreeView

Essa semana eu quebrei muito a cabeça com o componente QTreeView do QT4, foram vários problemas, ainda bem que consegui solucionar todos. Um desses problemas eu vou detalhar nesse post e também mostrarei a sua solução.

Eu queria uma TreeView com duas colunas, simples, sem hierarquias. Mas eu necessitava que a 2ª coluna tivesse um tamanho fixo e a 1ª coluna preenchesse todo o espaço restante da TreeView. O problema é que a QTreeView possui exatamente o comportamento contrário, nela as primeiras colunas possuem tamanhos fixos e a última preenche todo o espaço restante. É possível fazer com que todas as colunas tenham tamanhos fixos, mas não existe nenhuma maneira simples de definir qual coluna eu quero que preencha todo o espaço vazio. O que fazer?

Como meu widget era uma classe que herdava de QTreeView eu resolvi meu problema redefinindo o método resizeEvent. Esse método é chamado toda vez que o widget é redimensionado. O que eu precisava fazer era apenas redimensionar as minhas colunas sempre que o widget todo fosse redimensionado. A 2ª coluna ficaria com um tamanho fixo e a 1ª coluna ficaria com o restante do tamanho da TreeView menos o tamanho da 2ª coluna.

O método ficou assim:

def resizeEvent(self, event):
last_column_size = 25
self.setColumnWidth(0, self.width() - last_column_size)
self.setColumnWidth(1, last_column_size)

Simples, fácil e funcionou muito bem.

Se alguém souber outra maneira, principalmente se for mais fácil, sinta-se a vontade para comentar.

Nenhum comentário:

Postar um comentário