Pergunta

Eu olhei no código fonte GTK ea altura do cabeçalho é privado. Eu tentei algo, mas não funcionou como queria (o heightWithHeader é 1?!)

Glib::RefPtr<Gdk::Window> pWindow = treeView.get_bin_window();

treeView.set_headers_visible(true);
pWindow->get_size(width, heightWithHeader);

treeView.set_headers_visible(false);

pWindow->get_size(width, heightWithoutHeader);

r_treeView.set_headers_visible(true);

returnValue = heightWithHeader - heightWithoutHeader;

Você pode me ajudar com outra solução ou uma correção para o meu código?

Update: eu tenho que ajustar a altura do TreeView para exibir um número fixo de linhas. Eu faço isso, ajustando o tamanho do recipiente (a ScrolledWindow) para headerHeight + numberRowsToDisplay * heightOfRow.

Foi útil?

Solução

A razão seu código não funciona é muito provável que você está sendo "muito impaciente", não dando GTK + tempo para fazer o redesenho dos widgets antes de fazer os cabeçalhos invisíveis novamente.

GTK + não chamar imediatamente quando você faz uma chamada que requer um redesenho. Em vez redraws estão na fila, e, em seguida, feito de uma só vez a partir do + loop principal do GTK. Desta forma, fazendo duas mudanças para widgets em seqüência não causa dois redraws, mas apenas um.

É um pouco de um truque, mas você pode tentar o GTK + truque "clássico"-rubor evento, inserindo um loop como este depois de ligar os cabeçalhos:

while(gtk_events_pending())
  gtk_main_iteration();

Isso simplesmente laços enquanto houver eventos em fila 's GTK + (o sorteio mudanças mencionadas acima são eventos, internamente), e libera-los, em seguida, dá o controle de volta para você. Isto irá muito provavelmente resultar em alguma cintilação visual, apesar de tudo.

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