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

Discussion :

[Débutant] Débuter dans Qt: question sur les signals

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut [Débutant] Débuter dans Qt: question sur les signals
    Bonjour tlm,
    alors voilà je suis entrain de suivre le tutorial : "Débuter dans la création d'interfaces graphiques avec Qt 4" que je trouve super et bien fait .

    Si j'ai bien compris, les signals sont automatiquement implémenté (par moc) mais ici par exemple:http://qt.developpez.com/tutoriels/i...ge=canon-force
    on a plusieurs attribues dans notre classe. Comment alors le signal sera associé et à quel attribue ?
    comment il sait que:
    void angleChanged(int newAngle); est pour surveiller l'attribue currentAngle
    et que void forceChanged(int newForce); est pour surveiller l'attribue currentForce

    En regardant de prêt: le nom de signal est angleChanged alors que le nom de l'attribue est currentAngle

    et si j'ai un attribue qui s'appelle compte, comment faire alors ?

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par alaya.zied Voir le message
    Si j'ai bien compris, les signals sont automatiquement implémenté (par moc)
    Je pense que tu as à moitié bien compris cet aspect:

    - moc implémente le code interne pour définir ce qu'est un signal et un slot, ainsi que les moyens pour (dé)connecter un slot à un signal, relayer un signal émis, et les fonctionnalités de base pour émettre un signal.

    - il n'en reste pas moins que les signaux ne s'émettent pas tout seul.

    Dans le tuto, cela se fait dans la fonction 'setAngle' où après quelques tests on décide que le signal angleChanged va être émis (et donc que tout slot qui y est connecté va être exécuté). Cela est fait par cette ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    emit angleChanged(currentAngle);
    En résumé, c'est au développeur d'une classe comportant des signaux de coder l'émission desdits signaux quand il l'estime pertinent. C'est grâce au mot clef 'emit' qu'il peut le faire.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Par défaut
    Merci beaucoup nouknouk ,
    ce que tu a dis est vrai. Mais dans l'exemple de cette page: http://qt.developpez.com/tutoriels/i...-personnalises

    void valueChanged(int newValue); est le slot lié à currentValue. Pourtant il n'y aucun emit dans tout le code.

    en regardant de plus prêt le constructeur de l'objet, je trouve:
    connect(slider, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged(int)));

    slider a le signal valueChanged fourni par Qt
    ce dernier est lié à notre nouveau signal (qui s'appelle valueChanged aussi) de notre objet ce qui explique tout.

    Merci nouknouk pour ton aide ça été utile pour moi.

  4. #4
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par alaya.zied Voir le message
    connect(slider, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged(int)));
    c'est un cas un peu plus spécifique du connect: il est en effet possible de connecter à un signal non pas un slot mais un autre signal.
    Cela permet de facilement émettre un second signal lorsqu'un premier a été émis.

    Cela permet d'éviter d'avoir à implémenter un nouveau slot composé d'une seule instruction 'emit' pour émettre le signal voulu. Ainsi, ce connect de deux signaux remplace tout ce code:
    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
     
    // dans le prototype de MaClasse:
     
    QSlider *slider;
     
    signals:
      void mySignalSliderValueChanged(int value);
     
    private slots:
      void onSliderValueChanged(int value);
     
    // dans le constructeur de MaClasse:
    connect(slider, SIGNAL(valueChanged(int)), this, SLOT(onSliderValueChanged(int)));
     
    // Le slot qui va réémettre notre signal à nous:
    public MaClasse::onSliderValueChanged(int theValue) {
        emit mySignalSliderValueChanged(theValue);
    }

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

Discussions similaires

  1. [débutant] 2 questions sur les formulaires
    Par pepper18 dans le forum IHM
    Réponses: 3
    Dernier message: 19/04/2007, 11h50
  2. [Débutant] question sur les formulaires
    Par IDE dans le forum Access
    Réponses: 8
    Dernier message: 15/07/2006, 16h37
  3. [Débutant] Question sur les lumières
    Par Mandalar dans le forum DirectX
    Réponses: 10
    Dernier message: 04/01/2006, 13h49
  4. [parseur] [Débutant] Question sur les parseurs
    Par steph-n dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 02/05/2005, 19h17
  5. [débutant] question sur les #
    Par Ultros dans le forum C
    Réponses: 3
    Dernier message: 29/04/2004, 12h30

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