Um die Höhe und Breite von a zu erhalten GtkEventBox
ich habe folgendes versucht:
GtkRequisition requisition;
gtk_widget_get_child_requisition(widget, &requisition);
// Getting requisition.height 0
widget->allocation-x //getting 0
widget->allocation-height //getting -1
gtk_widget_get_size_request( widget, &height, &width); //getting 0
Welche Funktion gibt Ihnen die tatsächlich angezeigte Höhe und Breite des Widgets?
Sobald Ihr Widget realisiert wurde (mit einer Größe, die davon abhängt, was der übergeordnete Container ihm geben kann), sollten Sie in der Lage sein, diese Werte zu erhalten widget->allocation.width
Und widget->allocation.height
.
Es ist nichts Falsches daran, wie gtk dies tut. Es gibt einen Unterschied zwischen der Größe, die ein Widget haben möchte, und der Größe, die es tatsächlich bekommt. Daher ist das Timing beim Lesen dieser Werte wichtig. Das Vorhandensein von ‘get’-Methoden für diese Variablen ändert nichts an der Tatsache, dass sie noch nicht initialisiert sind.
Die übliche Art und Weise, wie die Leute dies umgehen, besteht darin, das anzuzapfen size-allocate
Signal, das ausgegeben wird, wenn das Widget eine neue aktuelle Größe hat. Etwas wie das:
void my_getsize(GtkWidget *widget, GtkAllocation *allocation, void *data) {
printf("width = %d, height = %d\n", allocation->width, allocation->height);
}
Und verbinden Sie irgendwo in Ihrer Hauptschleife das Signal:
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);
Wenn Sie GTK3 verwenden und das Widget realisiert wurde, können Sie nach der Zuordnung fragen. Dies hat den Vorteil, dass es der Raum ist, den es gibt Wirklich hat im Gegensatz zu dem, was es verlangt hat.
//GtkWidget* widget;
GtkAllocation* alloc = g_new(GtkAllocation, 1);
gtk_widget_get_allocation(widget, alloc);
printf("widget size is currently %dx%d\n",alloc->width, alloc->height);
g_free(alloc);
Sind Sie sicher, dass Ihr Widget sowohl angezeigt als auch realisiert/gemappt wurde? Sie können die Größe nicht erhalten, bis das Widget “echt” angelegt wurde.
Versuchen Sie, die zu hören Kartenereignis Signal.