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 :

Transfert de signaux/évènements d'un widget à un enfant ?


Sujet :

Qt

  1. #1
    Membre habitué
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Points : 176
    Points
    176
    Par défaut Transfert de signaux/évènements d'un widget à un enfant ?
    Bonjour à vous.

    Pour des raisons de bidouillages obscures, j'aimerai pouvoir transférer des signaux ou des évènements (à voir selon ce qui est le plus pratique) d'un Widget à l'un des Widget enfant. Le but est qu'un clic de souris dans une zone prédéfinie du widget parent produise le même effet que si le Widget enfant était sous le clic.

    J'ai pour l'instant essayé la chose suivante où _table est un QTableWidget* data member de MyWidget. Je veux que le clic de l'utilisateur ait le même résultat que si il avait cliqué au point (10, 10) (c'est pour l'exemple) du QHeaderView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void MyWidget::mousePressEvent(QMouseEvent *event)  
    {  
        QHeaderView *headerview = _table->horizontalHeader();
        QPoint headerpoint = QPoint(10,10); headerview->mapFromGlobal(event->globalPos());
        const int index = headerview->logicalIndexAt(headerpoint);
        if ((index >= 0) && (index < headerview->count())) {
            QApplication::postEvent(headerview, new QMouseEvent(QEvent::MouseButtonPress, headerpoint, event->button(), event->buttons(), Qt::NoModifier));
        }
        QWidget::mousePressEvent(event);  
    }
    Actuellement, cette implémentation procure une récursion infinie (ou très grande) conduisant parfois jusqu'au crash de l'application. Je ne sais pas trop pourquoi.

    Comment résoudre ce problème (et quelle est la meilleure façon de procéder) ?

    Merci beaucoup

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    S'il s'agissait d'héritage, je vous aurais dit qu'un virtual aurait suffit. Cependant, vu qu'il s'agit de parenté, il faut savoir que Qt envoie ses signaux depuis le haut de l'arbre et qu'il en descend jusqu'à ce qu'il widget accepte l’événement. De ce fait, si vous avez une fonction event() dans votre widget enfant, par exemple, il vous suffira de gérer le cas du clic de souris dedans et de faire un event->accept() puis un return true ou false, voir la doc pour savoir lequel des deux est à utiliser pour stopper la propagation. Une autre solution, identique dans la forme, est d'utiliser mousePressEvent() dans votre widget enfant et y mettre event->accept() pour demander l'arrêt de la propagation. De ce fait, il ne sera plus nécessaire de faire quoi que ce soit dans le mousePressEvent() père.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

Discussions similaires

  1. Plusieurs évènements pour un même widget
    Par Maestro31 dans le forum Tkinter
    Réponses: 16
    Dernier message: 17/08/2011, 10h13
  2. Transfert d'icone par évènement
    Par microJaP dans le forum Delphi
    Réponses: 2
    Dernier message: 28/04/2007, 15h37
  3. petit problème de transfert d'événement souris
    Par Lady dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 24/04/2007, 11h46
  4. Réponses: 4
    Dernier message: 04/12/2005, 20h58

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