Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt]problème avec les layouts.

depuis que j'ai rajouté Q_OBJECT

Sujet résolu
    24 mars 2008 à 13:54:05

    Bonjour,
    lorsque je ne met pas Q_OBECT mon code compile mais lorsqu'on clique sur un bouton celui si ne "trouve pas" mon slot perso.
    Bref il fallait rajouter la macro.
    Le soucis c'est que depuis que je l'ai rajouté j'ai l'erreur suivante:

    Citation : Pas de titre

    g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
    -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"d:\QT\i
    nclude\QtCore" -I"d:\QT\include\QtCore" -I"d:\QT\include\QtGui" -I"d:\QT\include
    \QtGui" -I"d:\QT\include" -I"." -I"d:\QT\include\ActiveQt" -I"release" -I"." -I"
    d:\QT\mkspecs\win32-g++" -o release\moc_mainMenu.o release\moc_mainMenu.cpp
    g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
    oc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o "release\Calculs_Electro.exe"
    release\main.o release\mainMenu.o release\intensite.o release\moc_mainMenu.o -L
    "d:\QT\lib" -lQtGui4 -lQtCore4
    release\intensite.o(.text+0x69):intensite.cpp: undefined reference to `vtable fo
    r Intensite'
    release\intensite.o(.text+0x70):intensite.cpp: undefined reference to `vtable fo
    r Intensite'
    release\intensite.o(.text+0x11b):intensite.cpp: undefined reference to `Intensit
    e::staticMetaObject'
    release\intensite.o(.text+0x337):intensite.cpp: undefined reference to `Intensit
    e::staticMetaObject'
    release\intensite.o(.text+0xa49):intensite.cpp: undefined reference to `vtable f
    or Intensite'
    release\intensite.o(.text+0xa50):intensite.cpp: undefined reference to `vtable f
    or Intensite'
    release\intensite.o(.text+0xafb):intensite.cpp: undefined reference to `Intensit
    e::staticMetaObject'
    release\intensite.o(.text+0xd17):intensite.cpp: undefined reference to `Intensit
    e::staticMetaObject'
    collect2: ld returned 1 exit status
    mingw32-make[1]: *** [release\] Error 1
    mingw32-make[1]: Leaving directory `C:/programmations/'
    mingw32-make: *** [release] Error 2



    Or j'ai bien fais les allocation de mémoire et j'ai aussi initialisé mes variable en private sous forme de pointeur.

    pourquoi le compilo me donne cette erreur?
    bon je vais pas surcharger la page de code donc cliquez sur secret pour le voir.
    /*
    intensite.h
    -------------
    */
    #ifndef H_INTENSITE_H
    #define H_INTENSITE_H
     
    #include <QWidget>
    #include <QDialog>
    #include <QPushButton>
    #include <QLabel>
    #include <QLineEdit>
    #include <QString>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
     
    class Intensite : public QDialog {
     
            Q_OBJECT
     
            public:
                    Intensite(QWidget *parent=0);
            
            public slots:
                    void calculI();
                    
            private:
            
                    QPushButton *m_calculer;
                    QLabel *label_tension, *label_resistance; 
                    QLabel *label_resultat;
                    QString string_tension, string_resistance, string_resultat, string_inLabel;
                    QLineEdit *m_tension, *m_resistance;
                    QVBoxLayout *vLayout;
                    QHBoxLayout *hLayoutTension, *hLayoutResistance;
                    double d_tension, d_resistance;
     
    };
     
    #endif
    

    /*
    intensite.cpp
    ----------------
    */
     
    #include "intensite.h"
     
    Intensite::Intensite(QWidget *parent) : QDialog(parent)
    {
            setFixedSize(500, 500);
            setWindowTitle(tr(" Intensité d'un courant continu"));
     
        label_tension = new QLabel("Tension : ");
            m_tension   = new QLineEdit;
            
            label_resistance = new QLabel("Resistance : ");
            m_resistance = new QLineEdit;
     
            m_calculer = new QPushButton(tr("Calculer"));
            connect(m_calculer, SIGNAL(clicked()), this, SLOT(calculI()));
            
            string_tension = m_tension->text();
            string_resistance = m_resistance->text();
            d_tension = string_tension.toDouble();
            d_resistance = string_resistance.toDouble();
            
            hLayoutTension = new QHBoxLayout;
            hLayoutTension->addWidget(label_tension);
            hLayoutTension->addWidget(m_tension);
            
            hLayoutResistance = new QHBoxLayout;
            hLayoutResistance->addWidget(label_resistance);
            hLayoutResistance->addWidget(m_resistance);
            
            vLayout = new QVBoxLayout;
            vLayout->addLayout(hLayoutTension);
            vLayout->addLayout(hLayoutResistance);
            vLayout->addWidget(m_calculer);
            
            setLayout(vLayout);
    }
     
    void Intensite::calculI()
    {
            double resultat   = d_tension/ d_resistance;
            
            string_resultat.setNum(resultat);
            string_inLabel = "I = U : R \nI = "+string_tension+" : "+string_resistance+"\nI = "+string_resultat;
            
            label_resultat = new QLabel(string_inLabel);
            
            vLayout->addWidget(label_resultat);
            
            setLayout(vLayout);
    }
    




    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
    :)
      24 mars 2008 à 14:25:54

      undefined reference to vtable

      ca fait erreur de configuration sur le compilo... tu as un truc qui a pas du bien s'inclure... tu compiles sous minGW en console? sinon essaye pour voir
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2008 à 14:28:47

        je compile avec Qt prompt et j'ai déjà compilé plein d'autre projet sans soucis donc je ne comprend pas (j'ai compilé par exemple qwt)
        • Partager sur Facebook
        • Partager sur Twitter
        :)
          24 mars 2008 à 14:46:02

          si c'est ce que je pense c'est simple, comme tu as inclus Q_Object tu ne peux plus te contenter de taper make il faut que tu refasses les 3 commandes
          qmake -project
          qmake
          make
          • Partager sur Facebook
          • Partager sur Twitter
            25 mars 2008 à 15:14:45

            Citation : eoxo

            si c'est ce que je pense c'est simple, comme tu as inclus Q_Object tu ne peux plus te contenter de taper make il faut que tu refasses les 3 commandes
            qmake -project
            qmake
            make


            en fait, dans ce cas-ci, il n'est pas obligé de refaire qmake -project. le seul temps que l'on fait qmake -project, c'est quand un fichiers s'ajoute au projet. Et même à ça, le fichier .pro peux être très facilement modifiable à la main ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!

            [Qt]problème avec les layouts.

            × 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