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 :

Appeler le slot d'une autre classe

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Points : 34
    Points
    34
    Par défaut Appeler le slot d'une autre classe
    Salut, je travaille sur un logiciel qui lit un fichier pour le modifier et le sauvegarder. J'essaie donc de connecter le signal clicked() d'un bouton de ma classe fenetre au slot de ma classe fichier, ce slot est selectFile(), il permet simplement de choisir le fichier avec l'explorateur pour stocker le chemin dans un QString.
    Le programme compile bien mais affiche QObject::connect: No such slot QFile::selectFile() lors de l'exécution et le bouton ne répond pas, il ne se passe rien.

    J'ai choisit des noms de classe nuls par contre, comme Mywin pour la fenetre, pas la peine de me le préciser, j'avais juste pas envie de tout changer et de m'embrouiller davantage. Et aussi ma classe fichier (Myfile) hérite de QWidget car elle doit pouvoir utiliser getOpenFileName(), cette méthode est utilisée par le slot selectFile() justement.

    Mywin.h :
    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
     
    #ifndef DEF_MAFENETRE
    #define DEF_MAFENETRE
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QMessageBox>
    #include <QString>
    #include <QTextStream>
    #include <QComboBox>
    #include <QFile>
    #include "myfile.h"
     
    class Mywin : public QWidget
    {
        Q_OBJECT
     
        public:
        Mywin();
        int getIndex();
     
        private:
        QPushButton *m_button1;
        QPushButton *m_button2;
        QPushButton *m_button3;
        QComboBox *m_scrollList ;
        QFile *m_file;
     
    };
     
    #endif

    Mywin.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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include "mywin.h"
    #include "myfile.h"
     
     
    Mywin::Mywin() : QWidget()
    {
        setFixedSize(500, 250);
        m_button1 = new QPushButton("choix 1", this);
        m_button2 = new QPushButton("choix 2", this);
        m_button3 = new QPushButton("choix 3", this);
        m_button1->move(60,40);
        m_button2->move(60,80);
        m_button3->move(160,180);
     
        m_scrollList = new QComboBox();
     
        QString chaine1 = "texte1";
        QString chaine2 = "texte2";
        QString chaine3 = "texte3";
        QStringList strlist = (QStringList() << chaine1 << chaine2 << chaine3) ;
     
        m_scrollList->addItems(strlist);
        m_scrollList->setCurrentIndex(2);
     
     
        m_file = new QFile();
        QObject::connect(m_button1, SIGNAL(clicked()), qApp, SLOT(quit())) ;
        QObject::connect(m_button2, SIGNAL(clicked()), m_file, SLOT(selectFile())) ;
        QObject::connect(m_button3, SIGNAL(clicked()), m_file, SLOT(saveFile())) ;
     
    }
     
     
    int Mywin::getIndex(){
     
        int index = m_scrollList->currentIndex();
        return index;
     
    }

    Myfile.h
    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
    #ifndef MYFILE_H
    #define MYFILE_H
     
    #include <QApplication>
    #include <QWidget>
    #include <QString>
    #include <QFileDialog>
    #include <QFile>
    #include <QTextStream>
    #include <QDataStream>
    #include "mywin.h"
     
    class Myfile : public QWidget
    {
     
        Q_OBJECT
     
    public:
        Myfile();
     
    public slots:
        void selectFile();
        void saveFile();
     
     
    private:
        QFile *file;
        QTextStream m_stream;
        QDataStream m_datastream;
     
    };
     
    #endif // MYFILE_H

    Myfile.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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include "myfile.h"
     
    Myfile::Myfile() {
     
    }
     
     
    void Myfile::selectFile(){
     
        QString chemin = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "*.txt");
        file = new QFile(chemin);
        file->open(QIODevice::ReadWrite);
     
    }
     
     
    void Myfile::saveFile(){
     
        QString offset = "0x23";
        bool ok;
        uint offsetdec = offset.toUInt(&ok, 16);
     
        QTextStream m_stream(file);
     
        m_stream.seek(offsetdec);
     
        QDataStream m_datastream(file);
     
        Mywin wnd;
        int indexListe = wnd.getIndex();
        quint16 number = indexListe;
        m_datastream << number;
     
        file->close();
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    En effet, il ne trouve pas de fonction selectFile() dans la classe QFile.
    Votre classe, ce n'est pas QFile mais MyFile. Vous instanciez la mauvaise classe (semble t-il).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Points : 34
    Points
    34
    Par défaut
    Merci pour votre réponse, en fait il y a un problème car mes classes sont interdépendantes, l'une inclut l'autre et inversement. Pour inclure la classe myfile dans mywin le compilateur essaye d'inclure mywin dans myfile, et pour ça il doit d'abord inclure myfile dans mywin, et ainsi de suite. Il ne peut pas compiler.
    Je pense que j'ai un problème de relation entre les classes, est-ce qu'il faut regrouper les 2 classes en une seule quand il y a une relation de dépendance trop forte entre les deux ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Normalement, cela ne devrait pas poser plus de problème que ça (sauf un problème de conception), mais en tout cas le compilateur pourra compiler.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Appeler un tableau dans une autre classe
    Par jasinski13 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 28/05/2011, 14h43
  2. Réponses: 3
    Dernier message: 14/09/2010, 10h14
  3. Appel membre static dans une autre classe
    Par cyriltec dans le forum C#
    Réponses: 2
    Dernier message: 12/04/2010, 11h23
  4. [Joomla!] appel de fonction d'une autre classe dans un autre fichier
    Par lkryss dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 27/07/2007, 16h55
  5. Probleme appel de fct dans une autre classe
    Par crakotte_finance dans le forum C++
    Réponses: 6
    Dernier message: 09/10/2006, 21h22

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