Domanda

Ho cercato nel codice sorgente gtk e l'altezza dell'intestazione è privata. Ho provato qualcosa ma non ha funzionato come desiderato (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;

Potete aiutarmi con un'altra soluzione o una correzione del mio codice?

Aggiornamento: devo regolare l'altezza della treeview per visualizzare un numero fisso di righe. Lo faccio regolando le dimensioni del contenitore (una finestra a scorrimento) su headerHeight + numberRowsToDisplay * heightOfRow.

È stato utile?

Soluzione

Il motivo per cui il tuo codice non funziona è molto probabile che tu sia "troppo impaziente", non dai a GTK + il tempo di fare il ridisegno dei widget prima di rendere nuovamente invisibili le intestazioni.

GTK + non disegna immediatamente quando si effettua una chiamata che richiede un ridisegno. Invece i ridisegni vengono messi in coda e quindi eseguiti tutti in una volta dal ciclo principale GTK +. In questo modo, fare due modifiche ai widget in sequenza non provoca due ridisegni, ma solo uno.

È un po 'un trucco, ma potresti provare il "classico" GTK + trucco di flushing di eventi, inserendo un loop come questo dopo aver attivato le intestazioni:

while(gtk_events_pending())
  gtk_main_iteration();

Questo semplicemente scorre fino a quando ci sono eventi nella coda di GTK + (le modifiche al sorteggio menzionate sopra sono eventi, internamente) e li svuota, quindi ti restituisce il controllo. Ciò molto probabilmente comporterà comunque uno sfarfallio visivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top