Gtk : Aktuellen Wert von hscale/vscale abfragen?



  • Hallo,
    beim ersten Versuch ist mir der Rechner abgeschmiert, daher noch ein Versuch:

    Ich versuche schon seit einigen Tagen herauszubekommen, wie man den aktuellen Wert herausbekommt, der mit einem Gtk-Widget hscale eingestellt wurde.
    Ich habe das Signal "value_changed" mit einer Call-Back-Funktion abgefangen, aber wie kommt man jetzt an den Wert heran ?



  • Müsste mit gtk_range_get_value () gehen.

    Demnächste einfach mal in die API Doku schaun 😉



  • Sorry, wenn ich mich ein bischen blöd anstelle, aber irgendwie komme ich mit der Doku nicht zurecht.
    Dort ist nur beschrieben, wie man ein hscale-Widget erzeugt.
    Die von dir beschriebene Funktion ist für ein Range(Widget?) aber nicht für ein hscale.
    Ich hab's erstmal so versucht:

    void hscale_changed( GtkWidget *widget, gpointer data )
    {
    gdouble val;

    val = gtk_range_get_value (widget);
    g_print("slider changed %d\n",val);
    }

    das ergebnis ist aber immer 0.

    Vielleicht liegen meine Probleme auch darin begründet, das ich keine (wenig) Ahnung von OOP habe !



  • fatal error schrieb:

    Sorry, wenn ich mich ein bischen blöd anstelle, aber irgendwie komme ich mit der Doku nicht zurecht.
    Dort ist nur beschrieben, wie man ein hscale-Widget erzeugt.
    Die von dir beschriebene Funktion ist für ein Range(Widget?) aber nicht für ein hscale.

    GtkHScale ist ein GtkRange und du kannst somit alle Methoden von GtkRange auch auf GtkHScale anwenden. Schau mal unter dem stichwort OOP und Vererbung.

    fatal error schrieb:

    Ich hab's erstmal so versucht:

    void hscale_changed( GtkWidget *widget, gpointer data )
    {
    gdouble val;

    val = gtk_range_get_value (widget);
    g_print("slider changed %d\n",val);
    }

    Du versuchst einen Double als Integer auszugeben. Müsste also so aussehen:

    g_print("slider changed %f\n",val);
    

    Außderdem überprüf mal, ob du auch mit gtk_range_set_range () einen gültigen Bereich angegeben hast.



  • Klasse, das war's.
    Der Formatparameter %d stand noch von einem alten Versuch da, als ich noch von Integer ausgegangen bin. Dann hatte ich glong in gdouble geändert, aber den Formatparameter vergessen.
    Das kommt davon, wenn die Kleinen so programmieren wollen wie die Großen.
    Vielen Dank für die schnelle Hilfe.
    Jetzt kommt beim Compilieren zwar noch ne Warnung ( inkompatibler Zeigertyp ) aber das bekomme ich wahrscheinlich mit einem Cast weg.



  • fatal error schrieb:

    Jetzt kommt beim Compilieren zwar noch ne Warnung ( inkompatibler Zeigertyp ) aber das bekomme ich wahrscheinlich mit einem Cast weg.

    Dafür müsste es den Makro GTK_RANGE(widget) geben. Find ihn in der Doku aber nicht. Ist aber auch nichts anderes als ein Cast.


Anmelden zum Antworten