TD2_2009-2010[c++]

Voir le sujet précédent Voir le sujet suivant Aller en bas

TD2_2009-2010[c++]

Message  didi le Dim 29 Jan 2012, 21:10

bonsoir ,

je fait le td2_qt 2009-2010

et j'ai un problem (et j'ai de difficile à comprendre)



MyWindow.h

Code:
#ifndef MYWINDOW_H_
#define MYWINDOW_H_
#include <QLabel>
#include <QFrame>

class MyWindow : public QFrame {
private :
   QLabel *lb1;
   QLabel *lb2;

public :
   MyWindow();

};


#endif /* MYWINDOW_H_ */

et MyWindow.cpp


Code:
#include "MyWindow.h"
#include <QLabel>
#include <QSpinBox>

using namespace std;

MyWindow::MyWindow() {
   lb1 = new QLabel("Salut");
   lb2 = new QLabel("Au revoir");
}

main.cpp

Code:
#include <QLabel>
#include <QApplication>
#include "MyWindow.h"


using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWindow label;
    label.show();

    return a.exec();
}

l'erreur vien de la ligne MyWindow label;

l'erreur de compilation est :
référence indéfinie vers « MyWindow::MyWindow() »

merci d'avance

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  smb le Lun 30 Jan 2012, 10:39

@didi, as-tu bien dans le fichier .pro de ton projet les lignes suivantes ?

Code:
SOURCES += MyWindow.cpp \
   main.cpp



smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  didi le Lun 30 Jan 2012, 14:32

Oui
Le fichier UBMi.pro :
Code:

TEMPLATE = app
TARGET = UIBmi
QT += core \
    gui
HEADERS += MyWindow.h \
      MBmi.h
SOURCES += MyWindow.cpp \
      MBmi.cpp \
    main.cpp
FORMS +=
RESOURCES +=

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  smb le Lun 30 Jan 2012, 15:17

Là, je ne vois pas ce qui pose problème.

Ce que je ne comprends pas c'est la présence de gui dans QT de ton .pro, et en plus, le message de l'erreur que tu donnes ne correspond pas à celui que j'ai quand je vire le MyWindow.cpp du .pro qui est :

Code:
undefined reference to `MyWindow::MyWindow()'

As-tu correctement installé les versions conseillées pour Qt et MinGW ?

As-tu suivi à la lettre le pas à pas du TD ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  didi le Lun 30 Jan 2012, 18:13

oui j'ai bien installer le Qt et bien suivi le td2 de 2009-2010

et maintenant je vien de supprimer le td et j'ai tous recommencé ..

MyWindow.h

Code:
#ifndef MYWINDOW_H_
#define MYWINDOW_H_

#include <QFrame>
#include <QLabel>

class MyWindow : public QFrame {
public :
  MyWindow();

private :
  QLabel *lb1;
  QLabel *lb2;
};


#endif /* MYWINDOW_H_ */

MyWindow.cpp


Code:
#include "MyWindow.h"
#include <QLabel>
#include <QVBoxLayout>

using namespace std;


MyWindow::MyWindow() {
   QFont font("Times", 25, QFont::Bold);
   lb1 = new QLabel("Salut");
   lb2 = new QLabel("Au Revoir");
   lb1->setFont(font);
   lb2->setFont(font);
   QVBoxLayout *layout = new QVBoxLayout;
   layout->addWidget(lb1,0,0);
   layout->addWidget(lb2,0,0);
   setLayout(layout);

}


Et main.cpp
Code:

#include <QApplication>
#include "MyWindow.h"

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


UBMi.pro


Code:
TEMPLATE = app
TARGET = UBMi
QT += core \
    gui
HEADERS += MyWindow.h
SOURCES += MyWindow.cpp \
    main.cpp
FORMS +=
RESOURCES +=


maintenat ça marche .... Smile et je ne sais pas pourquoi avant il y avait preoblem .. Question

et une ptit question

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(lb1,0,0);
layout->addWidget(lb2,0,0);
setLayout(layout);

si je ne met pas tous le widget (QLabel...) dans un layaout ,
la fenetre contien rien .. est-ce que c'est normale ..?

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  Nicky le Lun 30 Jan 2012, 18:35

tiens je pensais qu'il fallait "Q_OBJECT" dans le .h ...

Il en est dispenser car il hérite de QFrame?

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  didi le Lun 30 Jan 2012, 20:16

Nicky a écrit:tiens je pensais qu'il fallait "Q_OBJECT" dans le .h ...

Il en est dispenser car il hérite de QFrame?

T'as bien raison Nicky ...

en effet Quand je ne met pas de Q_OBJECT dans le class je n'ai pas d'erreur ..
mais mes slots ne fonction pas c'est Normale La macro Q_OBJECT ....

quand j'écris les slots comme private j'ai des erreur de compilations comme :
référence indéfinie vers « MyWindow::MyWindow() »

et quand je défini comme slots comme public
ça marche très bien mais slots fonctionne bien aussi.
je vien de tester avec une fonctionne calcul

MyWindow.h

Code:

#ifndef MYWINDOW_H_
#define MYWINDOW_H_
#include <QFrame>
#include <QLabel>
#include <QPushButton>
#include <QSpinBox>
class MyWindow : public QFrame {

   Q_OBJECT
public :
  MyWindow();

private :
  QLabel *lb1;
  QLabel *lb2;
  QPushButton *button;
  QSpinBox *sb1,*sb2;
  QLabel *res;

public slots :
   void calcul();

};

MyWindow.cpp
Code:

#include <sstream>
#include <string>
#include "MyWindow.h"
#include <QLabel>
#include <QVBoxLayout>
#include <QPushButton>
#include <QSpinBox>
#include <QGridLayout>


using namespace std;


MyWindow::MyWindow() {
//   QFont font("Times", 25, QFont::Bold);
   lb1 = new QLabel("Valuer1");
   lb2 = new QLabel("Valeur2");
//   lb1->setFont(font);
//   lb2->setFont(font);
   res = new QLabel("0");
   button = new QPushButton("Egale");
   QGridLayout *layout = new QGridLayout;
   sb1 = new QSpinBox;
   sb2 = new QSpinBox;
   layout->addWidget(lb1,0,0);
   layout->addWidget(sb1,0,1);
   layout->addWidget(lb2,1,0);
   layout->addWidget(sb2,1,1);
   layout->addWidget(button,2,0);
   layout->addWidget(res,2,1);
   connect(button,SIGNAL(clicked()),this,SLOT(calcul()));
   setLayout(layout);

}

void MyWindow::calcul()   {
   int nb1,nb2;
   int res1;
   ostringstream oss;
   string st = "4";
   nb1 = sb1->value();
   nb2 = sb2->value();
   res1 = nb1+nb2;
   oss  << res1;
   st = oss.str();
   res->setText(QString(st.c_str()));


}


main.cpp
Code:

#include <QApplication>
#include "MyWindow.h"

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

Est-ce que que je ne peux avoir les slots privés ..... ?






didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  pbt le Mar 31 Jan 2012, 08:55

Un jour il faudrait que tu fixes ton charset, histoire d'avoir de vrais accents ;-)

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  Nicky le Mar 31 Jan 2012, 11:17

les slot privé ou public c est comme tu veux. priver c est bien je trouve

verifie que tout tes fichier sont bien présent dans ton .pro

Nicky

Nombre de messages : 300
Age : 29
Prénom : Pierre
Statut : Tout fini ! 2012
Localisation : Bruxelles / Chimay
Date d'inscription : 18/03/2008

Revenir en haut Aller en bas

Re: TD2_2009-2010[c++]

Message  Contenu sponsorisé Aujourd'hui à 21:04


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum