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

Qt Discussion :

[QGraphicsItem] Propagation Hover Events


Sujet :

Qt

  1. #1
    Membre �m�rite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par d�faut [QGraphicsItem] Propagation Hover Events
    Salut,

    J'ai une scene avec differents items superpos�s (il s'agit du toit d'une maison avec diff�rents items en dessous repr�sentant les diff�rentes pi�ces ) et j'aimerais que quand on passe la souris sur le toit, le toit disparaisse, et ensuite que chaque pi�ce se colore au passage de la souris.

    Le toit s'en va bien, par contre mes child items ne recoivent pas les hoverEvent (ils sont tous capt�s par l'item qui represente le toit).

    Avez vous une solution pour faire ce genre de choses ?

    Merci

    G.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par d�faut
    Bonjour,

    Je ne suis plus sur, mais je croit qu'il y a une m�thode ( fontion ? ) pour dire � Qt de continuer � faire passer l'event.

    Sinon, dans la fonction qui capte l'event, il n'y a qu'a appeler une fonction pour les pi�ces ... ( mais on perd un peu en efficacit� )
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  3. #3
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Tu fait comment pour cacher ton toit?
    hide()? alpha = 0?

  4. #4
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Dans le pire des cas, tu peux r�impl�menter mouseMoveEvent.

    Mais sinon, quand on fait event->ignore(), �a transmet effectivement l'�v�nement au parent si je ne m'abuse.

    void QEvent::accept ()

    Sets the accept flag of the event object, the equivalent of calling setAccepted(true).

    Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent widget.

    -------------------

    void QEvent::ignore ()

    Clears the accept flag parameter of the event object, the equivalent of calling setAccepted(false).

    Clearing the accept parameter indicates that the event receiver does not want the event. Unwanted events might be propgated to the parent widget.

    See also accept().

    Une petite astuce dans ton cas serait de d�placer ton toit � la position (20000, 0) par exemple, le temps o� la souris est sur lui. D�s que les "pi�ces" de la maison n'ont plus la souris point�es sur elles, tu ram�nes le toit.

    C'est un peu "moche" mais �a peut marcher

  5. #5
    yan
    yan est d�connect�
    R�dacteur
    Avatar de yan
    Homme Profil pro
    Ing�nieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Ing�nieur expert
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par d�faut
    Citation Envoy� par Alp Voir le message
    Une petite astuce dans ton cas serait de d�placer ton toit � la position (20000, 0) par exemple, le temps o� la souris est sur lui. D�s que les "pi�ces" de la maison n'ont plus la souris point�es sur elles, tu ram�nes le toit.

    C'est un peu "moche" mais �a peut marcher
    Normalement le hide() permet d'enlever temporairement un item. Et fait cela.
    J'ai constat� que si un alpha =0, l'item est toujours ici et capte les �v�nements.

  6. #6
    Membre �m�rite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par d�faut
    En fait, je fais pas de hide() sur l'item principal, mais plutot un show sur les items du dessous (qui sont cach�s par defaut).

    J'ai essay� avec les accept() / ignore(), et aussi les handleChildEvents(), mais sans succ�s. Je n'ai pas eu vraiment le temps d'insister pour �tre franc, j'esp�re avoir plus de temps en fin de journ�e.

    G.

  7. #7
    Membre exp�riment�
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par d�faut
    Le probl�me de accept et ignore c'est que la relation de parent� qui d�pend de la mod�lisation ne correspondra pas forc�ment avec la vue de l'application.

    Trouver une solution avec hide() parait plus propre.

    Tes �l�ments sous le toit poss�dent bien les fonctions n�cessaire pour capter les event souris? As tu fait un test sans toit?

    Si tu ne fais pas de hide et que tes �l�ments sont sous le toit, il est normal que tu ne puisse pas cliquer dessus. Tentes un raise sur les items apres le show.

  8. #8
    Alp
    Alp est d�connect�
    Expert confirm�

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par d�faut
    Un hide() sur le toit puis une surcharge de mouseMoveEvent(QMouseEvent* e) qui modifie la couleur de fond (de sorte � ce que ce soit cette derni�re qui soit affich�e lors du painting de ta QGraphicsView) et �a ira non ?

    Faut juste surveiller que la souris soit bien dessus. D�s qu'une des pi�ces voit que la souris est sur elle, il faudrait �ventuellement qu'elle le dise aux autres, pour �tre s�r que �a sera la seule � �tre mise en �vidence.

  9. #9
    Membre �m�rite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par d�faut
    J'essaierai tout �a, merci pour votre aide.

    Tes �l�ments sous le toit poss�dent bien les fonctions n�cessaire pour capter les event souris? As tu fait un test sans toit?
    Oui j'ai test� et �a marche.

    Un hide() sur le toit puis une surcharge de mouseMoveEvent(QMouseEvent* e) qui modifie la couleur de fond (de sorte � ce que ce soit cette derni�re qui soit affich�e lors du painting de ta QGraphicsView) et �a ira non ?
    Le probl�me du hide() c'est que mes images sont en perspective, et le toit n'est pas en fait qu'un toit mais un pixmap qui repr�sente d'autres choses sur les c�t�s. Pour utiliser le hide() il faudrait que je fasse un graphicsitem qui couvrent juste la zone des parties inf�rieures, mais sa forme est assez complexe. Le fait de plutot faire un show sur les items inf�rieurs m'�vitait cela.

    Enfin bon, j'essaierai cet apr�s midi.

    Merci encore,

    G.

  10. #10
    Membre exp�riment�
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par d�faut
    Et un raise() pour faire passer tes items au dessus du toit ne ferait pas l'affaire?

  11. #11
    Membre �m�rite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Finist�re (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par d�faut
    Bon c'est bon �a marche, sans rien de particulier. J'ai conserv� le show() de mes sous-items lors du hover du parent, j'ai desactiv� le handleChildEvent, et �a � l'air de marcher. J'ai tout repris depuis le d�but et �a marche.

    J'ai aussi red�fini le mousePressEvent des items, et en lisant la doc, j'ai vu
    The mouse press event decides which item should become the mouse grabber (see QGraphicsScene::mouseGrabberItem()). If you do not reimplement this function, the press event will propagate to any topmost item beneath this item, and no other mouse events will be delivered to this item.
    Je ne suis pas s�r que �a ait quelque chose � voir avec le probl�me, car les hoverEvents ne sont pas des mouseEvent (m�me si je pense qu'ils soient li�s).

    Merci encore,

    G.

Discussions similaires

  1. Concept propagation et bubbling event
    Par Ali Kent dans le forum G�n�ral JavaScript
    R�ponses: 9
    Dernier message: 16/12/2014, 16h22
  2. [Flex4] Propagation Event TitleWindow
    Par Flamenco dans le forum Flex
    R�ponses: 6
    Dernier message: 12/10/2011, 14h31
  3. R�ponses: 4
    Dernier message: 20/10/2009, 18h34
  4. propagation �v�nement avec dispatch event
    Par john123 dans le forum Flex
    R�ponses: 3
    Dernier message: 19/02/2009, 13h25
  5. Propagation Event sur le Parent
    Par Moustico dans le forum Windows Forms
    R�ponses: 3
    Dernier message: 30/09/2008, 15h40

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