Frage

Ich habe in der gtk Quellcode geschaut und die Kopfhöhe ist privat. Ich habe versucht, etwas, aber es hat nicht funktioniert als wollte (der 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;

Können Sie mir mit einer anderen Lösung helfen oder ein Update zu meinem Code?

Update: Ich habe die Höhe der Baumansicht einzustellen, um eine feste Anzahl von Zeilen angezeigt werden soll. Ich tue dies, indem die Größe des Behälters einzustellen (a scrolledwindow) zu header + numberRowsToDisplay * heightOfRow.

War es hilfreich?

Lösung

Der Grund, Ihr Code nicht funktioniert, ist sehr wahrscheinlich, dass Sie „zu ungeduldig“ sind zu sein, nicht GTK + geben Zeit, um den Neuaufbau der Widgets zu tun, bevor Sie die Header unsichtbar machen wieder.

GTK + nicht sofort ziehen, wenn Sie einen Anruf zu tun, die einen Neuaufbau erfordert. Stattdessen werden redraws Warteschlange, und dann auf einmal getan von der GTK + Hauptschleife. Auf diese Weise macht zwei Änderungen an Widgets in Folge verursacht keine zwei redraws, aber nur eine.

Es ist ein bisschen wie ein Hack, aber man kann den „klassischen“ GTK + event Spülung Trick versuchen, durch eine Schleife wie diese eingefügt, nachdem Sie auf dem Header drehen:

while(gtk_events_pending())
  gtk_main_iteration();

Diese Schleifen einfach, solange gibt es Veranstaltungen in GTK + 's-Warteschlange (die Auslosung Änderungen oben genannten Ereignisse, intern), und spült sie dann die Kontrolle an Dich zurück gibt. Dies wird sehr wahrscheinlich in einigen visuellen Flimmern führen, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top