Totalement fatigué avec la hauteur et la largeur du widget Gtk

Essayer d’obtenir la hauteur et la largeur de GtkEventBox.
Essayé de suivre les choses.

GtkRequisition requirejsition; gtk_widget_get_child_requirejsition(widget, &requirejsition); // Getting requirejsition.height 0 ---------------------------------------------------------- widget->allocation-x //getting 0 widget->allocation-height //getting -1 ---------------------------------------------------------- gtk_widget_get_size_request( widget, &height, &width); // Again getting 0 -------------------------------------------------------------------------- 

C’est vraiment dommage que Gtk n’ait pas fourni de fonction simple qui vous donne la hauteur affichée et avec le widget.

Quelqu’un a essayé de prendre de la hauteur et avec GtkWidget?

Une fois que votre widget a été réalisé (sa taille dépend du contenu que le conteneur parent peut lui donner), vous devriez pouvoir obtenir ces valeurs avec widget->allocation.width et widget->allocation.height .

Il n’y a rien de mal à ce que gtk le fasse. Il existe une différence entre la taille qu’un widget aimerait avoir et sa taille réelle. La synchronisation de la lecture de ces valeurs est donc importante. Avoir des méthodes ‘get’ pour ces variables ne changera pas le fait qu’elles ne sont pas encore initialisées.

La façon habituelle de contourner ce problème consiste à puiser dans le signal d’ size-allocate qui est émis lorsque le widget prend une nouvelle taille réelle. Quelque chose comme ça:

 void my_getsize(GtkWidget *widget, GtkAllocation *allocation, void *data) { printf("width = %d, height = %d\n", allocation->width, allocation->height); } 

Et dans votre boucle principale quelque part, connectez le signal:

g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);

Si vous utilisez GTK3 et que le widget a été réalisé, vous pouvez demander ce qu’il a été atsortingbué. Cela a l’avantage d’être l’espace qu’il a réellement par opposition à ce qu’il a demandé.

  //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); 

Utilisez gtk_widget_size_request (), pas gtk_widget_get_size_request ().

http://library.gnome.org/devel/gtk/stable/GtkWidget.html#gtk-widget-size-request

Êtes-vous sûr que votre widget a été à la fois affiché et réalisé / mappé? Vous ne pouvez pas obtenir la taille tant que le widget n’a pas été configuré “pour de vrai”.

Essayez d’écouter le signal map-event .