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 :

Utiliser la fonction connect()

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut Utiliser la fonction connect()
    bonjour a tous,
    je cherche a créer une interface graphique avec QT, étant débutant avec QT je cherche simplement a créer une fenetre avec un boutton qui m'affiche un message en appelant une fonction
    voici mon code tout simple mais qui ne marche pas
    .cpp
    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
     
    MainWindows::MainWindows()
    {
     
        QWidget *mainWidget = new QWidget;
     
     
        QPushButton *validation = new QPushButton("affiche msg");
     
        // Connexion du clic du bouton à la fermeture de l'application
        QObject::connect(validation , SIGNAL(clicked()), this, SLOT(test()));
     
        QFormLayout *layout = new QFormLayout;
        layout->addWidget(validation);
     
        mainWidget->setLayout(layout);
     
        setCentralWidget(mainWidget);
    }
     
    void MainWindows::test(){
        QMessageBox msgBox;
        msgBox.setText("The document has been modified.");
        msgBox.exec();
    }
    mon probleme provient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(validation , SIGNAL(clicked()), this, SLOT(test()));
    l'erreur etant sur le this
    QObject::connect: No such slot QMainWindow::test() in ..\IHMWestgard\mainwindows.cpp:15

    en effet le this retourne un QMainWindow alors que je me trouve dans ma classe MainWindows je ne comprend pas comment cela et possible meme si ma classe MainWindows herite bien de QMainWindow le this devrais me retourne un objet MainWindows ?

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Ce code m'apparaît correct

    Tu peux nous montrer le fichier d'en-tête (le .h) ?
    La fonction test() est bien déclarée sous un public slots: ?
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    merci de ta réponse Daïmanu effectivement je n'avais pas déclarer ma fonction test en public slots cependant cela ne change rien j'ai toujours la même erreur
    voici mon .h avec la modif
    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
    #ifndef MAINWINDOWS_H
    #define MAINWINDOWS_H
     
    #include<QtWidgets>
     
     
    class MainWindows : public QMainWindow
    {
    public:
        MainWindows();
     
    public slots:
        void test();
     
     
    private:
        QPushButton *validation;
        QLineEdit *valeur;
        QLineEdit *date;
        QFormLayout *layout;
    };
     
    #endif // MAINWINDOWS_H

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    C'est rigoureusement la même erreur ?

    Attention, dans ta classe tu déclares :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        QPushButton *validation;
        //et
        QFormLayout *layout;
    Et dans ton constructeur tu redéclares à nouveau ces variables qui vont masquer celles de ta classe.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Oui c’est exactement le même erreur
    Merci pour la déclaration c’est juste dû au faite que j’ai tester différent chose dans mon code pour faire marcher cette fonction CONNECT

  6. #6
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Quand tu définis une classe utilisant le mécanisme de signaux/slots, tu dois insérer la macro Q_OBJECT dans la classe.

    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
    #ifndef MAINWINDOWS_H
    #define MAINWINDOWS_H
     
    #include<QtWidgets>
     
     
    class MainWindows : public QMainWindow
    {
        Q_OBJECT
     
    public:
        MainWindows();
     
    public slots:
        void test();
     
     
    private:
        QPushButton *validation;
        QLineEdit *valeur;
        QLineEdit *date;
        QFormLayout *layout;
    };
     
    #endif // MAINWINDOWS_H
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    je sais pas si c'est mieux maintenant j'ai comme erreur

    C:\Users\Charles.Socie\Documents\IHMWestgard\mainwindows.h:7: erreur : undefined reference to `vtable for MainWindows'Nom : Capturepb.PNG
Affichages : 498
Taille : 75,0 Ko

    voici Egalement le .pro parce que apparemment l'erreur viendrais de la, mais je l'ai pas toucher donc ce me parait bizarre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    QT += widgets
     
    SOURCES += \
        main.cpp \
        mainwindows.cpp \
        evaluationwindows.cpp
     
    HEADERS += \
        mainwindows.h \
        evaluationwindows.h

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    ok c'est bon j'ai trouver il fallait juste recompiler qmake grand merci a toi Daïmanu

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/03/2011, 09h08
  2. manuel d'utilisation de fonction
    Par SteelBox dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 11/10/2004, 01h28
  3. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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