IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

[gtkmm3] emettre un signal.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut [gtkmm3] emettre un signal.
    Salut les GTK,

    j'y suis presque car j'essaie d'exécuter une fonction quand ont appuis sur une touche,

    ma technique marche mais il faudrait que je pense puisse émettre un signal dont le callback rafraîchis l'écran.

    Je sais que c'est possible avec un signal personnalisée et la fonction emit().

    Mais je n'arrive pas a émettre un signal qui ne soit pas personnel.

    Merci pour vos réponses.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    On pourrait voir le callback qui doit être exécuté lors de l'émission. Et en même temps quel signal veux-tu émettre ?

  3. #3
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Salut gérald3d,

    il est vrai que le message est un peu confus et manque d'informations mais je ne peut pas te donner le code maintenant (trop long pas sous la mains):

    Je peut préciser que je veut émettre un signal de type signal_motion_notify_event: le signal qui est émis quand on bouge la souris au dessus de mon display (un widget Gtk::Layout) car je doit mettre a jours une image,

    ce qui est fait dans le callback du signal signal_motion_notify_event.

    Et donc j'aimerai pouvoir modifier l'image avec les touches flèchées et donc
    il faut, en partie, que j'émette ce signal car si la souris ne bouge pas le signal n'est pas émis et donc pas de changement d'image.

    Et je pense que ma technique pour implémenter la manipulation du clavier n'est pas au point car j'ai beau appuyer sur la touche plusieurs fois.
    Le callback d'appuie de la touche n'est exécuter qu'une fois au lieu de plusieurs fois (je crois que j'utilise le signal_key_press du Gtk::Layout si je me souvient bien).

    Je ne sais si c'est en rapport avec les mouvement de la souris que le callback n'est exécuter qu'une fois ?

    Merci pour vos réponses éclairées.

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    AAAAAAAArgs,

    j'arrive pas a trouver la fonction analogue a g_signal_emit() dans la glibmm.

    C'est la doc, je préfère celle du C concernant Gtk+3 et co car ya un index et j'ai pas trouver dans la doxygen de la glibmm.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    AAAAAAAArgs,

    j'arrive pas a trouver la fonction analogue a g_signal_emit() dans la glibmm.

    C'est la doc, je préfère celle du C concernant Gtk+3 et co car ya un index et j'ai pas trouver dans la doxygen de la glibmm.
    À force de recherche je crois que j'ai trouvé ton bonheur : bool Gtk::Widget::event (GdkEvent*event);

  6. #6
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Salut gérald3d,

    je suis de retours de vacances et du coup la réponse tardive:

    Est tu sur que l'on peut émettre un "signal" avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool Gtk::Widget::event (GdkEvent*event);
    Pas plutot un GdkEvent justement, ce que je pense différents, sans vouloir t'offenser ?

    Car quand je cherche un GdkEvent dans la doc je tombe sur des Events du type:

    GDK_NOTHING a special code to indicate a null event.
    GDK_DELETE the window manager has requested that the toplevel window be hidden or destroyed, usually when the user clicks on a special icon in the title bar.
    GDK_DESTROY the window has been destroyed.
    GDK_EXPOSE all or part of the window has become visible and needs to be redrawn.
    GDK_MOTION_NOTIFY the pointer (usually a mouse) has moved.
    GDK_BUTTON_PRESS a mouse button has been pressed.
    GDK_2BUTTON_PRESS a mouse button has been double-clicked (clicked twice within a short period of time). Note that each click also generates aGDK_BUTTON_PRESS event.
    GDK_DOUBLE_BUTTON_PRESS alias for GDK_2BUTTON_PRESS, added in 3.6.
    GDK_3BUTTON_PRESS a mouse button has been clicked 3 times in a short period of time. Note that each click also generates a GDK_BUTTON_PRESS event.
    GDK_TRIPLE_BUTTON_PRESS alias for GDK_3BUTTON_PRESS, added in 3.6.
    GDK_BUTTON_RELEASE a mouse button has been released.
    GDK_KEY_PRESS a key has been pressed.
    GDK_KEY_RELEASE a key has been released.
    GDK_ENTER_NOTIFY the pointer has entered the window.
    GDK_LEAVE_NOTIFY the pointer has left the window.
    GDK_FOCUS_CHANGE the keyboard focus has entered or left the window.
    GDK_CONFIGURE the size, position or stacking order of the window has changed. Note that GTK+ discards these events for GDK_WINDOW_CHILD windows.
    GDK_MAP the window has been mapped.
    GDK_UNMAP the window has been unmapped.
    GDK_PROPERTY_NOTIFY a property on the window has been changed or deleted.
    GDK_SELECTION_CLEAR the application has lost ownership of a selection.
    GDK_SELECTION_REQUEST another application has requested a selection.
    GDK_SELECTION_NOTIFY a selection has been received.
    GDK_PROXIMITY_IN an input device has moved into contact with a sensing surface (e.g. a touchscreen or graphics tablet).
    GDK_PROXIMITY_OUT an input device has moved out of contact with a sensing surface.
    GDK_DRAG_ENTER the mouse has entered the window while a drag is in progress.
    GDK_DRAG_LEAVE the mouse has left the window while a drag is in progress.
    GDK_DRAG_MOTION the mouse has moved in the window while a drag is in progress.
    GDK_DRAG_STATUS the status of the drag operation initiated by the window has changed.
    GDK_DROP_START a drop operation onto the window has started.
    GDK_DROP_FINISHED the drop operation initiated by the window has completed.
    GDK_CLIENT_EVENT a message has been received from another application.
    GDK_VISIBILITY_NOTIFY the window visibility status has changed.
    GDK_SCROLL the scroll wheel was turned
    GDK_WINDOW_STATE the state of a window has changed. See GdkWindowState for the possible window states
    GDK_SETTING a setting has been modified.
    GDK_OWNER_CHANGE the owner of a selection has changed. This event type was added in 2.6
    GDK_GRAB_BROKEN a pointer or keyboard grab was broken. This event type was added in 2.8.
    GDK_DAMAGE the content of the window has been changed. This event type was added in 2.14.
    GDK_TOUCH_BEGIN A new touch event sequence has just started. This event type was added in 3.4.
    GDK_TOUCH_UPDATE A touch event sequence has been updated. This event type was added in 3.4.
    GDK_TOUCH_END A touch event sequence has finished. This event type was added in 3.4.
    GDK_TOUCH_CANCEL A touch event sequence has been canceled. This event type was added in 3.4.
    GDK_EVENT_LAST marks the end of the GdkEventType enumeration. Added in 2.18

    Ou me serai-je tromper ?

    Il serai plus simple de trouver le pendant de g_signal_emit(...) dans la glibmm.

    Mais bon, cette doc est mal foutue je trouve.

    A+ Luke spywoker.

  7. #7
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Je ne comprend pas bien ton histoire de signal.

    Pour moi la notion de signal est liée à celle de widget: quand tu crée un nouveau widget, tu peux lui associer de nouveaux signaux pour exploiter les callbacks associés à ce nouveau widget et tu mets en branle tout un mécanisme propre à GTK.

    Si il s'agit seulement de déclencher l'exécution d'une fonction donnée en détectant un évènement particulier (appui sur une touche, mouvement de la souris,...) il suffit fabriquer un "event handler".
    Par exemple dans GraceGTK (c'est du GTK2 en C, mais je pense que tu peux transposer facilement en gtkmm), j'ai une GtkDrawingArea appelée w_canvas que je connecte à mon event handler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       gtk_widget_add_events (w_canvas
                             , GDK_ENTER_NOTIFY_MASK
                             | GDK_LEAVE_NOTIFY_MASK
                             | GDK_BUTTON_PRESS_MASK
                             | GDK_POINTER_MOTION_MASK
                             | GDK_KEY_PRESS_MASK
                             | GDK_KEY_RELEASE_MASK
                             );
      g_signal_connect (w_canvas ,"key-press-event"   ,G_CALLBACK (ev_handler) ,NULL);
      g_signal_connect (w_canvas ,"key-release-event" ,G_CALLBACK (ev_handler) ,NULL);
    et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void ev_handler (GtkWidget *widget ,GdkEvent *event ,gpointer data)
    {
    ...
      switch (event->type) {
      case GDK_KEY_PRESS:
        switch (event->key.keyval) {
        case GDK_Shift_L:
        case GDK_Shift_R:
          Shift_pressed = GDK_Shift_L;
          break;
      case GDK_KEY_RELEASE:
    ...
    et c'est ev_handler() qui appelle la fonction de mon choix.

    Je pense que c'est ce que gerald3 suggérait de faire en te signalant Gtk::Widget::event (GdkEvent*event);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2010] Emettre un signal sonore à la réception de nouveaux messages
    Par Daejung dans le forum Outlook
    Réponses: 2
    Dernier message: 08/05/2012, 11h50
  2. emettre un signal sonore BEEP
    Par KNIZOU dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/04/2010, 15h12
  3. [g_signal_emit_by_name] Emettre un signal "expose-event"
    Par Gamall dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 07/02/2010, 21h10
  4. Changer la valeur d'un GtkAdjustment sans emettre de signal
    Par gdorchie dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 13/08/2009, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo