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

    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
    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
    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
    Modérateur

    Bonjour,

    Pour pourvoir distinguer les différentes surcharges des signaux, voir cette discussion :
    [thread=1386976][Qt 5] Nouvelle syntaxe pour les signaux et slots : comment distinguer les signaux selon leurs arguments ?[/thread]
    Le même principe s'applique aux slots.
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

  5. #5
    Membre expert
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Pour pourvoir distinguer les différentes surcharges des signaux, voir cette discussion :
    [thread=1386976][Qt 5] Nouvelle syntaxe pour les signaux et slots : comment distinguer les signaux selon leurs arguments ?[/thread]
    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).