Como chegar a altura do cabeçalho GtkTreeView?
-
22-07-2019 - |
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.
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.