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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top