+ Répondre à la discussion Actualité déjà publiée
  1. #1
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Autriche

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

    Informations forums :
    Inscription : novembre 2012
    Messages : 970
    Points : 7 746
    Points
    7 746

    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 : Belgique

    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 émérite Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 347
    Points : 2 810
    Points
    2 810

    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
    Expert éminent sénior

    Avatar de Winjerome
    Homme Profil pro
    Inscrit en
    septembre 2009
    Messages
    9 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : septembre 2009
    Messages : 9 208
    Points : 34 843
    Points
    34 843

    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.
    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
    Ma version améliorée de FireDVP et son homologue ChroDVP pour Chrome.

  5. #5
    Membre émérite Avatar de air-dex
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    1 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 347
    Points : 2 810
    Points
    2 810

    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, 08h18
  2. Signaux et slots avec Qt4
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 01/11/2010, 22h23

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