2009-05-08 3 views
0

Я посмотрел в исходном коде gtk, а высота заголовка является частной. Я пытался что-то, но он не работает, как хотелось (heightWithHeader 1 ?!)Как получить высоту заголовка gtktreeview?

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; 

Можете ли вы помочь мне с другим решением или исправления в мой код?

Обновление: Мне нужно отрегулировать высоту древовидной структуры, чтобы отобразить фиксированное количество строк. Я делаю это, настраивая размер контейнера (прокручиваемого окна) на headerHeight + numberRowsToDisplay * heightOfRow.

ответ

0

Причина, по которой ваш код не работает, очень вероятно, что вы «слишком нетерпеливы», не предоставляя GTK + время, чтобы перерисовать виджеты, прежде чем снова сделать заголовки невидимыми.

GTK + не рисует сразу, когда вы выполняете вызов, требующий перерисовки. Вместо этого перерисовываются очереди, а затем выполняются все сразу из основного цикла GTK +. Таким образом, выполнение двух изменений в виджетах в последовательности не вызывает двух перерисовок, но только один.

Это немного рубить, но вы можете попробовать «классический» GTK + событие-промывочный трюк, вставляя петлю, как это после того, как вы включите заголовки:

while(gtk_events_pending()) 
    gtk_main_iteration(); 

Это просто петли по если в очереди GTK + есть события (изменения, указанные выше, являются событиями, внутренне) и сбрасывают их, а затем возвращают вам контроль. Это, скорее всего, приведет к некоторому визуальному мерцанию.

+0

Мне нужно настроить высоту древовидной структуры, чтобы отобразить фиксированное количество строк. Я делаю это, настраивая размер контейнера (прокручиваемого окна) на headerHeight + numberRowsToDisplay * heightOfRow. – 2009-05-08 08:39:12

Смежные вопросы