gtkmm



  • kann es vielleicht sein das man ein widget nicht mit 2 verschiedenen events verbinden kann?

    bool pressEvent_1(..)
    bool pressEvent_2(..)

    es wird nur das 1. signal verbunden und auch ausgelöst. das 2. wird gar nicht ausgelöst.

    weiß da jemand mehr?

    einen fall im internet konnte ich leider auch nicht finden



  • Ich weiß nicht was du haben willst, aber wenn du einfach nur zwei Funktionen aufrufen willst, kannst du das ja auch manuell tun:

    bool pressEvent (..) {
        pressEvent_1(..);
        pressEvent_2(..);
    }
    


  • leider kann ich das nicht machen.

    in einer button-klasse wird das release-Event 'effectRelease' an die instanz gebunden ( jeder button hat dieses event ).

    dann gibt es noch eine menu-klasse welcher ein container ist für button-objekte. wenn ich ein button in den menu-container einfüge, dann soll die menu-klasse ein weiteres release-Event an die instanz binden.

    aber wenn das nicht möglich ist sollte ich vielleicht mein design überdenken.

    die frage die sich jetzt aufwirft: Kann man an einem Widget mehr als nur ein Event vom selben Event-Typ (z.bsp.:signal_release_event) anbinden?



  • keine gtk+ / gtkmm geeks hier?



  • [quote="asdfasdf"]keine gtk+ / gtkmm geeks hier?[/quote]

    Ehrlich ueberrascht?

    Vielleicht hat's was mit http://www.google.com/trends?q=gtk,qt zu tun? ;-}



  • Überdenk dein Design. Ich nehme an, dass das zusätzliche releaseEvent eine Action (ala boost::bind) ausführen soll. Gib deiner Button-Klasse doch einen setter für so eine Action. Frag im releaseEvent nach, ob eine Action gesetzt wurde. Falls ja -> Ausführen.
    Oder du verwendest gleich das "clicked()"-Signal des Buttons.
    http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-connecting-signal-handlers.html.en
    Sollte für so dynamische connections sowieso verwendet werden.



  • Folgendes sagt die Dokumentation.

    sigc++ Dokumentation schrieb:

    iterator sigc::signal0< T_return, T_accumulator >::connect(const slot_type& slot_)

    Add a slot to the list of slots.

    sigc++ Dokumentation schrieb:

    During signal emission all slots that have been connected to the signal are invoked unless they are manually set into a blocking state.

    Mit anderen Worten, solltest du ein Event mit mehreren Events verbinden (connect), sollten die auch alle aufgerufen werden. Konstruiere mal ein minimales Code-Beispiel, in dem dein Problem auftritt.


Anmelden zum Antworten