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 :

Les signaux et slots avec Qt 5


Sujet :

Qt

  1. #1
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Points : 7 764
    Points
    7 764
    Par défaut Les signaux et slots avec Qt 5
    Cela fait maintenant plusieurs mois que Qt 5 est disponible. Cette dernière mouture du framework offre une nouvelle syntaxe de connexion pour les signaux et slots. Ce tutoriels Qt détaillera cette dernière et détaillera ses avantages sur l'ancienne syntaxe.

    Lire le tutoriel Qt : les signaux et slots avec Qt 5

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 9
    Points : 14
    Points
    14
    Par défaut Nouvelle Syntaxe !?
    Bonjour, Je ne viens pas souvent commenter ici ;

    Premièrement, je remercie grandement Olivier Goffart et Arnold Dumas(Traduc.) pour cet article.

    En effet, cet article me fait l'effet d'un coït binaire!
    Je n'avais jamais entendu parler de cette nouvelle façons d'écrire des signaux et slots (personnellement je préfère appeler cela comme le fait Microsoft: "Delegates")! Et je reconnais très bien cette syntaxe comme étant naturellement l'adressage directe d'une méthode de classe du type <return_type> (A::*F)(arguments); - donc bien entendu, le compilateur ne pourra accepter tout élément incompatible.

    Enfin, j'imagine que cette nouvelle syntaxe allège au moins un peu leur moc(Meta-Object-Compiler)...

  3. #3
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 653
    Points : 3 773
    Points
    3 773
    Par défaut
    Bon tuto, qui a le mérite de faire connaître cette nouvelle syntaxe.

    À titre personnel, je l'ai déjà adopté dans mes projets Qt utilisant Qt 5. Cependant j'ai eu des problèmes concernant la surcharge de slots. Quand un slot est surchargé, moc et le compilateur n'arrivent pas à retrouver leurs petits. Voici un exemple pour mieux comprendre :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <QApplication>
    #include <QObject>
     
    class A : public QObject
    {
        Q_OBJECT
     
        signals:
            void monSignal(bool, int);
    };
     
    class B : public QObject
    {
        Q_OBJECT
     
        public slots:
            void monSlot(bool, int) { /* ... */ }
     
            void monSlot(QObject, qlonglong) { /* ... */ }
    };
     
    int main(int argc, char ** argv) {
        QApplication app(argc, argv);
     
        A objA;
        B objB;
     
        // Le problème est ici
        QObject::connect(&objA, &A::monSignal,
                         &objB, &B::monSlot);
     
        return app.exec();
    }
    J'ai une erreur au niveau de la connexion des deux signaux. moc ne semble pas pouvoir faire la différence entre void B::monSlot(bool, int); et void B::monSlot(QObject, qlonglong);. Existe-t-il un moyen avec cette nouvelle syntaxe de pouvoir différencier les deux slots autrement que par le nom ? J'ai cherché dans la documentation de Qt 5 mais je n'ai rien trouvé (comme souvent d'ailleurs quand on y recherche quelque chose d'un peu avancé).

    Après cela reste du sucre syntaxique et l'ancienne syntaxe "QObject::connect(&objA, SIGNAL(monSignal(bool, int)), &objB, SLOT(monSlot(bool, int));" marche encore.
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour pourvoir distinguer les différentes surcharges des signaux, voir cette discussion :
    [Qt 5] Nouvelle syntaxe pour les signaux et slots : comment distinguer les signaux selon leurs arguments ?
    Le même principe s'applique aux slots.

  5. #5
    Membre expert Avatar de air-dex
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 653
    Points : 3 773
    Points
    3 773
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Pour pourvoir distinguer les différentes surcharges des signaux, voir cette discussion :
    [Qt 5] Nouvelle syntaxe pour les signaux et slots : comment distinguer les signaux selon leurs arguments ?
    Le même principe s'applique aux slots.
    Merci
    "Ils ne savaient pas que c'était impossible alors ils l'ont fait." Mark Twain

    Mon client Twitter Qt cross-platform Windows et Linux. (en cours de développement).

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2013, 09h18
  2. Signaux et slots avec Qt4
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 01/11/2010, 23h23

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