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 :

Erreur de connexion : no matching function for call to 'Widget::connect'

  1. #1
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut Erreur de connexion : no matching function for call to 'Widget::connect'
    bonjour
    je suis sur qt et je voudrais faire en sorte que l'lorsque on clique sur un bouton ça lance une fonction dans une autre classe.
    j'ai donc fait une connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(&tasckbuton, &QPushButton::pressed, &listtask[size], &task::presentation);
    mais je me prend l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ' no matching function for call to Widget::connect(QPushButton**, void (QAbstractButton::*)(), task**, void (task::*)())'
    ..\todoliste\widget.cpp: In member function 'void Widget::newtask(QString)':
    ..\todoliste\widget.cpp:27:85: error: no matching function for call to 'Widget::connect(QPushButton**, void (QAbstractButton::*)(), task**, void (task::*)())'
         connect(&tasckbuton, &QPushButton::pressed, &listtask[size], &task::presentation);
                                                                                         ^
    ca fait une journée que je suis dessus et je vous demande donc de l'aide
    pouvez vous m'aider

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    La fonction connect() attend des (simples) pointeurs vers les objets, or selon le message d'erreur toi tu passes des doubles pointeurs :
    Widget::connect(QPushButton**, void (QAbstractButton::*)(), task**, void (task::*)())
    Les deux & correspondants devant tasckbuton et listtask[size] sont donc à supprimer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(tasckbuton, &QPushButton::pressed, listtask[size], &task::presentation);
    Sinon sans contexte difficile d'être sûr, mais l'accès à [size] est quelque peu suspect et laisse supposer un accès hors limites.

  3. #3
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour je teste ca des que je peut mais ca a l'air de marché
    et voici le code qui défini size j'ai fait une variable pour éviter d'appeler tasklist.size a chaque fois et donc pour que ce soit pus rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        listtask.push_back(new task(name));
        int size (listtask.size());

  4. #4
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour ca génère encore des erreur
    Nom : Capture d’écran 2021-04-08 193105.png
Affichages : 581
Taille : 15,5 Ko

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par eneediorio Voir le message
    et voici le code qui défini size [...]
    Si tu affectes size après l'ajout de l'élément, alors je confirme il y a dépassement.
    Tu n'as pas besoin de cette variable, tu as une fonction membre toute faite pour accéder au dernier élément : .back().

    Pour ce qui est de la nouvelle erreur, cela présuppose que ta classe task n'hérite pas de QObject. Or c'est un des requis pour utiliser les signaux / slots.

  6. #6
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour
    j'ai donc rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class task: public QObject
    {
        Q_OBJECT
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Widget : public QWidget, public task
    {
    Q_OBJECT
    mais ca me donne ca :Nom : Capture d’écran 2021-04-09 112726.png
Affichages : 570
Taille : 25,7 Ko

  7. #7
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut


    QObject et l'héritage multiple, ce n'est pas une histoire d'amour… Aux dernières nouvelles, c'était surtout au niveau de la génération de code (moc) que ça coinçait.

    Ici, tu ne peux pas hériter à la fois de Task (qui hérite de QObject) et de QWidget (qui hérite aussi de QObject).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  8. #8
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    et Ducoup la solution serrais de supprimer ne pas inclure QObject dans widget ?

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Plutôt, de ne pas hériter de QWidget. Par contre, la macro Q_OBJECT doit rester.

    Sinon, que cherches-tu à faire avec ce mécanisme d'héritage multiple ? Avec plus de détails, on pourrait voir pour une solution qui utilise de la composition plutôt que de l'héritage.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    bonjour
    je crée une to do liste je me suis donc fait mon interface et dans une classe de tache.
    les tache on donc une fonction pour s'afficher elle utilise un slot de l'interface.
    mais l'interface doit donc pouvoir crée des tache. donc l'interface hérite de task et task peut donc afficher des élément dans l'interface

  11. #11
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Tu devrais te pencher sur deux concepts de programmation orientée objet : le SRP (principe de responsabilité unique) et le MVC (modèle-vue-contrôleur)

    A priori, une tâche n'est qu'un gros paquet de données, qui doit pouvoir être synchronisé avec une base de données ou autre (M dans MVC). Ensuite, tu as besoin d'une petite couche pour faciliter l'affichage de ces données dans ton interface graphique (V dans MVC). Fais donc deux classes : par exemple, Task (qui n'hérite pas de grand-chose) et TaskWidget (qui hérite de QWidget).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  12. #12
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    heu...
    je ne comprend pas

  13. #13
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Ta réponse est un peu courte . Que ne comprends-tu pas ? Sinon, un peu de lecture pour toi : https://doc.qt.io/qt-5/model-view-programming.html (MVC) et https://en.wikipedia.org/wiki/Single...lity_principle (SRP).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  14. #14
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    je lis tout ca et je reviens vers vous

  15. #15
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    donc si je comprend bien
    on a la classe task qui a toute les informations sur la tâche
    on a la classe taskwidjet qui elle permet d'organiser les données elle erite donc de task
    on a notre interface graphique qui elle affiche les taskwidjet elle hérite donc de taskwidjet et de task pour pouvoir crée de nouvelle tâche

    edit
    je pensait deja avoir mon model : task
    et ma vue : mon interface

  16. #16
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    Citation Envoyé par eneediorio Voir le message
    on a la classe taskwidjet qui elle permet d'organiser les données elle erite donc de task
    on a notre interface graphique qui elle affiche les taskwidjet elle hérite donc de taskwidjet et de task pour pouvoir crée de nouvelle tâche
    Pourquoi avoir un TaskWidget qui "organise" les données ? Normalement, elle se charge uniquement d'afficher une tâche. Il n'y a aucun besoin d'hériter de la tâche : elle doit juste avoir une variable membre qui pointe vers la tâche à afficher.

    L'interface graphique complète sera une grosse composition de TaskWidget, mais il n'y a aucun besoin d'héritage pour ça.

    Un principe de base de la conception logicielle, c'est d'éviter tout héritage si possible : l'héritage, c'est vraiment le dernier recours.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  17. #17
    Membre à l'essai
    Homme Profil pro
    programmation
    Inscrit en
    Janvier 2020
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : programmation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 69
    Points : 16
    Points
    16
    Par défaut
    ok je vais revoir tout mon projet merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/04/2016, 20h36
  2. Réponses: 7
    Dernier message: 14/03/2014, 21h50
  3. No matching function for call to 'Joueur::Joueur'
    Par Go'Gaule dans le forum Débuter
    Réponses: 4
    Dernier message: 02/07/2011, 07h50
  4. Réponses: 8
    Dernier message: 09/07/2010, 16h02
  5. no matching function for call
    Par pimousse280187 dans le forum Linux
    Réponses: 1
    Dernier message: 06/06/2009, 21h08

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