GTKmm: Auf Klicks auf HScale reagieren?



  • Hallo,

    ich bin ziemliche Anfänger mit dem Geschichten, weiß ungefähr das was in den Tutorials des Magazins steht, über GTKmm. Ich möchte jetzt auf Klicks auf eine HScale reagieren, weiß aber nicht wie ich das machen soll. Bei Button ist es mir klar, der hat da sein eingenes signal clicked(), keine Argumente, kein Rückgabetyp.

    void clicked()
    

    Bei HScale müsste ich aber auf die Methoden von Gtk::Widget zurückgreifen, und hier verwirren mich die Signale, hier z.B. button_press_event():

    bool button_press_event(GdkEventButton* event)
    

    Wieso Rückgabetyp und vorallem was für ein Parameter?

    Klärt mich mal bitte auf. 😕

    thx



  • Hallo,

    du liegst richtig: on_button_press_event ist die richtige Methode.
    Das heißt aber auch, dass du von HScale ableiten musst, wenn du ihr Verhalten ändern willst.

    Der Parameter ist vom Typ GdkEventButton und beinhaltet Daten wie die Koordinaten, Zeitpunkt des Klicks usw.
    Siehe auch hier: http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html#GdkEventButton

    Der Rückgabetyp gibt an, ob der Event in dieser Methode bereits abgearbeitet wurde. Falls nicht, wird versucht, ihn eine Ebene höher zu bearbeiten.

    MfG

    GPC



  • Was meinst du mit ableiten?

    Bzw. so ganz schlau werde ich aus deiner Antwort leider nicht, wie wendet man das nun an? 😕



  • extra large noob schrieb:

    Was meinst du mit ableiten?

    Ähm...

    class MyHScale : public Gtk::HScale {
    protected:
      bool on_button_press_event(GdkEventButton *evt) {
        //hier das, was du spezielles bei einem Klick machen möchtest...
        //HScale::on_button_press_event(evt);  //Wieder reinmachen, wenn du den event nach oben weitergeben möchtest.
        return true;
      }
    
    public:
      //Evtl. weitere Methoden? Sonst weg damit.
    };
    

    Das ist aber nur notwendig, wenn du das Verhalten von on_button_press_event beeinflussen möchtest (du sagst ja nichts genaues dazu?!). Wenn du nur das Signal erhalten willst, wann einer auf dein HScale geklickt hat, so lies weiter.

    Bzw. so ganz schlau werde ich aus deiner Antwort leider nicht, wie wendet man das nun an? 😕

    Du fügst deiner Klasse (die, die das HScale beinhaltet) eine Methode hinzu, die bool als Returnwert hat und ein GdkEventButton * als Parameter.
    Nun verknüpfst du das HScale signal_button_press_event Signal mit dieser Methode auf die gleiche Weise, wie du es mit einem Button machen würdest.

    MfG

    GPC


Anmelden zum Antworten