Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Signaux et slots

Sujet résolu
    3 juin 2020 à 17:49:46

    Bonjour à tous, je suis le cours de C++ et j'en arrive à ce merveilleux framework qu'est Qt.

    J'arrive ici et je recopie le code dans Qt Creator. Je fais Ctrl + R et le compilo me dit qu'il manque un main().

    Pas de problème mais je mets quoi dedans ?

    Mes tests :

    int main(int argc, char* argv[]) {
        QApplication app(argc, argv);
        QWidget a(MaFenetre());
        a.show();
        return app.exec();
    }
    

    => Erreur : repertoire\main.cpp:18:

    erreur : request for member 'show' in 'a', which is of non-class type 'QWidget(MaFenetre (*)())'

    int main(int argc, char* argv[]) {
        QApplication app(argc, argv);
        return app.exec();
    }
    

    => Run en arriere plan et n'affiche aucune fenêtre.

    Précision : j'ai bien configuré mon *.pro 

    QT += core gui
    QT += gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    SOURCES += \
        main.cpp
    
    HEADERS += \
        MaFenetre.h
    


    Le reste du code est exactement le même que celui du cours.

    EDIT : Pardon, trouvé la soluce tout seul !

    Le main() pour ceux qui auraient le même problème :

    int main(int argc, char* argv[]) {
        QApplication app(argc, argv);
        QWidget *w = new QWidget();
        QSlider *slider = new QSlider(Qt::Horizontal, w);
        slider->setGeometry(10, 60, 150, 20);
        QLCDNumber *lcd = new QLCDNumber(w);
        lcd->setSegmentStyle(QLCDNumber::Flat);
        lcd->move(50, 20);
        w->show();
        return app.exec();
    }

    RE-EDIT : J'ai remarqué que dans mon main() je ne me servais pas de la classe...

    Voici un code pour qui s'en sert :

    MaFenetre.h

    #ifndef DEF_MAFENETRE
    #define DEF_MAFENETRE
    
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QLCDNumber>
    #include <QSlider>
    #include <QWidget>
    
    class MaFenetre : public QWidget
    {
        public:
        MaFenetre();
        QWidget* creer();
    
        private:
        QLCDNumber *m_lcd;
        QSlider *m_slider;
    };
    
    #endif
    

    Main.cpp

    #include "MaFenetre.h"
    
    MaFenetre::MaFenetre() : QWidget()
    {
    
    }
    QWidget* MaFenetre::creer() {
        QWidget *w = new QWidget();
        setFixedSize(200, 100);
        m_lcd = new QLCDNumber(w);
        m_lcd->setSegmentStyle(QLCDNumber::Flat);
        m_lcd->move(50, 20);
        m_lcd->show();
        m_slider = new QSlider(Qt::Horizontal, w);
        m_slider->setGeometry(10, 60, 150, 20);
        m_slider->show();
        QObject::connect(m_slider, SIGNAL(valueChanged(int)), m_lcd, SLOT(display(int))) ;
        return w;
    }
    
    int main(int argc, char* argv[]) {
        QApplication app(argc, argv);
        QWidget* a = MaFenetre().creer();
        a->show();
        return app.exec();
    }
    

    Désolé de faire une discussion tout seul :p

    En espérant que ça servira à quelqu'un...


    -
    Edité par Chi_Iroh 3 juin 2020 à 19:56:19

    • Partager sur Facebook
    • Partager sur Twitter

    [Qt] Signaux et slots

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown