¿Cómo obtener la altura del encabezado gtktreeview?
-
22-07-2019 - |
Pregunta
He buscado en el código fuente gtk y la altura del encabezado es privada. He intentado algo pero no funcionó como quería (¡¿heightWithHeader es 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;
¿Me pueden ayudar con otra solución o una solución a mi código?
Actualización: tengo que ajustar la altura de la vista de árbol para mostrar un número fijo de filas. Lo hago ajustando el tamaño del contenedor (una ventana desplazada) a headerHeight + numberRowsToDisplay * heightOfRow.
Solución
La razón por la que su código no funciona es muy probablemente porque usted está `` demasiado impaciente '', no le da tiempo a GTK + para volver a dibujar los widgets antes de volver a hacer que los encabezados sean invisibles.
GTK + no se dibuja inmediatamente cuando realiza una llamada que requiere un redibujo. En cambio, los redibujos se ponen en cola y luego se hacen todos a la vez desde el bucle principal GTK +. De esta forma, hacer dos cambios en los widgets en secuencia no causa dos redibujos, sino solo uno.
Es un truco, pero podrías probar el " clásico " Truco de eliminación de eventos GTK +, insertando un bucle como este después de encender los encabezados:
while(gtk_events_pending())
gtk_main_iteration();
Esto simplemente se repite mientras haya eventos en la cola de GTK + (los cambios de sorteo mencionados anteriormente son eventos, internamente) y los vacía, luego le devuelve el control. Sin embargo, esto probablemente dará como resultado un parpadeo visual.