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()

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    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
    730
    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 : 730
    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: ?

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    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
    730
    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 : 730
    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.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 80
    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
    730
    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 : 730
    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

+ 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