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+ Discussion :

[gtkmm] Zone cliquable dans une fenetre?


Sujet :

GTK+

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut [gtkmm] Zone cliquable dans une fenetre?
    Bonjour!

    J'ai un petit probleme. j'aimerais pouvoir afficher une image dans une zone , et que cette image soit cliquable, et que lorsqu'elle est cliqué, qu'on récupere les positions x et y de la souris dans cette image ( c'est a dire , si j'ai une image 320*240, que quand je clique dans une zone, elle me renvoit les coordonées du point cliqué qui seront comprit entre 0<X<320 et 0<Y<240 )

    Est que vous savez comment je peux faire svp? J'ai déja un Gtk::Image dans une Gtk::EventBox, mais je ne sais pas trop quoi en faire...

    Merci bien

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Valkirion
    Bonjour!

    J'ai un petit probleme. j'aimerais pouvoir afficher une image dans une zone , et que cette image soit cliquable, et que lorsqu'elle est cliqué, qu'on récupere les positions x et y de la souris dans cette image ( c'est a dire , si j'ai une image 320*240, que quand je clique dans une zone, elle me renvoit les coordonées du point cliqué qui seront comprit entre 0<X<320 et 0<Y<240 )

    Est que vous savez comment je peux faire svp? J'ai déja un Gtk::Image dans une Gtk::EventBox, mais je ne sais pas trop quoi en faire...

    Merci bien
    j ai compris

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    C'etait le but, mais bon, ca m'avance pas ca ...

    Sinon, j'ai trouvé en fait qu'il fallait prendre la EventBox, et lui attaché un EventMask, ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	principal.pack_start(frameMain,Gtk::PACK_SHRINK);
    	boxForPicture.add(image);
    	boxForPicture.set_events(Gdk::BUTTON_RELEASE_MASK);
     
    	principal.add(boxForPicture);

    Quel est l'équivalent de gtk_signal_connect en gtkmm?

    Merchi

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Valkirion
    C'etait le but, mais bon, ca m'avance pas ca ...

    Sinon, j'ai trouvé en fait qu'il fallait prendre la EventBox, et lui attaché un EventMask, ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	principal.pack_start(frameMain,Gtk::PACK_SHRINK);
    	boxForPicture.add(image);
    	boxForPicture.set_events(Gdk::BUTTON_RELEASE_MASK);
     
    	principal.add(boxForPicture);

    Quel est l'équivalent de gtk_signal_connect en gtkmm?

    Merchi
    En fait il vaut mieux utiliser g_signal_connect !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    Oui, mais ca c'est pour le C, en C++ et GtkMM, g_signal_connect n'est plus utilisable, si?

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Valkirion
    Oui, mais ca c'est pour le C, en C++ et GtkMM, g_signal_connect n'est plus utilisable, si?
    Rien à voir avec GTK+, ca fait partie de la GLIB avant tout autre chose et d'ailleurs même en C avec GTK+ il est déconseillé (même dit dans la ref officielle) d'utiliser gtk_signal_connect !
    Citation Envoyé par La ref de GTK+
    gtk_signal_connect is deprecated and should not be used in newly-written code. Use g_signal_connect() instead.
    Bon après ca, moi je ne fait pas de C++ mais au moins je te met sur la bonne voie

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    Merci bien, ^^ mais ca fait déja une petite demi heure que je cherche l'équivalent de cette fonction, pas moyen de trouvé, ni même un bon tutoriel ou explicatif sur le gtkmm ^^

    Enfin, en esperant que quelqu'un s'y connait ptet +

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Franck.H
    Rien à voir avec GTK+, ca fait partie de la GLIB avant tout autre chose et d'ailleurs même en C avec GTK+ il est déconseillé (même dit dans la ref officielle) d'utiliser gtk_signal_connect !
    Comme il y a gtkmm, il existe glibmm.

    ça doit être Glib::SignalProxy0<R>::connect mais j'ai jamais compris comment ça fonctionnait

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    en fait il suffit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    {
    ....
     
    	principal.pack_start(frameMain,Gtk::PACK_SHRINK);
    	boxForPicture.add(image);
    	boxForPicture.set_events(Gdk::BUTTON_RELEASE_MASK);
     
    ....
     
    	boxForPicture.signal_button_release_event().connect(sigc::mem_fun(*this, &Interface::picturePressed));
     
    ....
     
    }
    bool Interface::picturePressed(GdkEventButton*)
    {
    	cout << "Coucou" << endl;
    	return true;
     
    }

    reste plus qu'a trouver comment obtenir la position de la souris au moment du clic ^^

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    bon, ca avance petit a petit ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    	// main windows
    	principal.pack_start(frameMain,Gtk::PACK_SHRINK);
    	boxForPicture.add(image);
    	boxForPicture.set_events(Gdk::BUTTON_RELEASE_MASK);
    	boxForPicture.add_events(Gdk::POINTER_MOTION_MASK);
    
    ....
    
    
    	boxForPicture.signal_button_release_event().connect(sigc::mem_fun(*this, &Interface::picturePressed));
    	boxForPicture.signal_motion_notify_event().connect(sigc::mem_fun(*this, &Interface::moveOnPicture));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    bool Interface::picturePressed(GdkEventButton*)
    {
    	cout << "Coucou" << endl;
     
    	return true;
     
    }
     
    bool Interface::moveOnPicture(GdkEvent*)
    {
    	cout<< "ouais!" << endl;
     
    	return true;
    }
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Compilation en cours...
    /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h: In member function ‘typename sigc::adaptor_functor<T_functor>::deduce_result_type<T_arg1, void, void, void, void, void, void>::type sigc::adaptor_functor<T_functor>::operator()(T_arg1) const [with T_arg1 = GdkEventMotion* const&, T_functor = sigc::bound_mem_functor1<bool, Interface, GdkEvent*>]’:
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:137:   instantiated from ‘static T_return sigc::internal::slot_call1<T_functor, T_return, T_arg1>::call_it(sigc::internal::slot_rep*, typename sigc::type_trait<T_arg3>::take) [with T_functor = sigc::bound_mem_functor1<bool, Interface, GdkEvent*>, T_return = bool, T_arg1 = GdkEventMotion*]’
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:144:   instantiated from ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [with T_functor = sigc::bound_mem_functor1<bool, Interface, GdkEvent*>, T_return = bool, T_arg1 = GdkEventMotion*]’
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:529:   instantiated from ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [with T_functor = sigc::bound_mem_functor1<bool, Interface, GdkEvent*>, T_return = bool, T_arg1 = GdkEventMotion*]’
    /usr/include/sigc++-2.0/sigc++/functors/slot.h:1157:   instantiated from ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [with T_functor = sigc::bound_mem_functor1<bool, Interface, GdkEvent*>, T_return = bool, T_arg1 = GdkEventMotion*]’
    /home/chris/TFE/TestInterface/lib/Interface.cpp:233:   instantiated from here
    /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:84: error: no match for call to ‘(sigc::bound_mem_functor1<bool, Interface, GdkEvent*>) (GdkEventMotion* const&)’
    /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:1850: note: candidates are: T_return sigc::bound_mem_functor1<T_return, T_obj, T_arg1>::operator()(typename sigc::type_trait<T_arg3>::take) const [with T_return = bool, T_obj = Interface, T_arg1 = GdkEvent*]
    make: *** [main] Erreur 1

    y me reste ca a regler ^^ donc j'aimerais savoir si la fonction en gras est bien la bonne, et si qlq un voit comment corrigé l'erreur de compilation? merci

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

Discussions similaires

  1. créer une zone graphique dans une fenetre
    Par jlg75 dans le forum Windows
    Réponses: 12
    Dernier message: 13/01/2012, 00h04
  2. Zone cliquable dans une image
    Par rad_hass dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/11/2010, 12h00
  3. [Batch] Copier coller une zone spécifique d'une fenetre dans un fichier excel
    Par gandalf20000000 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/05/2010, 14h23
  4. Mettre un lien cliquable dans une zone de texte
    Par mlny84 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/09/2009, 22h23
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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