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

Qt Discussion :

Problème "vtable" lors de la création d'une appli Qt


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut Problème "vtable" lors de la création d'une appli Qt
    Bonjour à tous,

    Je suis en train de faire mes premiers pas en Qt.

    Pour m'entrainer un peut je suis en train de faire des petites applications afin de voir la philosophie de la lib Qt.

    Je voudrais faire un convertisseur Euro-Dolar comme exemple afin de voir comment ça marche les slots, les connexions etc...

    J'ai trouve l'erreur " home/qt_slots/src/converter.cpp:54: undefined reference to `vtable for Converter' ". Je pense qu'il est lié à l'heritage virtuel de Converter (?).

    Mon code est le suivant:

    MAIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <QApplication>
    #include "converter.h"
     
    int main(int argc, char *argv[])
    {
     
    	QApplication app(argc, argv);
    	Converter aConverter;
     
          	return app.exec();
    }
    converter.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
     
    #include <QDialog>
     
    class Converter : public QDialog
    {
    Q_OBJECT
     
    public :
    Converter();
    ~Converter();
     
    public slots : 
    	void euroChanged(int aNum); 
     
    private : 
    	int _euroValue;
    };
    converter.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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include <QCoreApplication>
     
    #include "converter.h"
     
    #include <QPushButton>
    #include<QGridLayout>
    #include<QLabel>
    #include <QLineEdit>
     
     
     
    Converter::Converter()
    {
    	QWidget aWindow;
     
    	//declaring a main layout in a window
    	QGridLayout * aMainLayout = new QGridLayout(&aWindow);	
     
    	//declaring the labels
    	QLabel * aLabel1 = new QLabel("Euros");
    	QLabel * aLabel2 = new QLabel("Dolars");
     
    	//declaring a text line
    	QLineEdit * aLine1 = new QLineEdit;
    	QLineEdit * aLine2 = new QLineEdit;
     
    	//declaring the button
    	QPushButton * aButtonConvert = new QPushButton("Convert");
    	QPushButton * aButtonQuit = new QPushButton("Quit");
     
    	//adding the labels in the main layout
    	aMainLayout->addWidget(aLabel1,0,0);
    	aMainLayout->addWidget(aLine1,0,1);
     
    	aMainLayout->addWidget(aLabel2,1,0);
    	aMainLayout->addWidget(aLine2,1,1);	
     
    	//adding the button onto the main layout
    	aMainLayout->addWidget(aButtonQuit,2,0);
    	aMainLayout->addWidget(aButtonConvert,2,1);
    	aWindow.show();
     
    	//catching the signal and executing the callback
    	QObject::connect(aButtonQuit, SIGNAL(clicked()), this, SLOT(quit()));
     
    	QObject::connect(aButtonConvert,SIGNAL(clicked()), this, SLOT(euroChanged(4)));
     
    //Comment prendre la valeur du LineEdit Euro à la place de 4 ??
    };
     
    Converter::~Converter()
    {};
     
    void Converter::euroChanged(int iNum)
    {
    //int aNum = iString.toInt();
    qDebug("Hello from euroChanged");
    //setEuroValue(aNum);
     
    //Comment renvoyer la valeur sur la Line Edit des Dolars ??
    };
    Aussi j'ai 3 questions de plus...

    Comment prendre la valeur du LineEdit Euro à la place de 4 pour la recupérer dans la méthode euroChanged ?

    Comment renvoyer le résultat à la LineEdit Dolar une fois qu'on a fait la conversion ?

    Pouvez vous me donner des conseilles pour avoir une structure de l'application (conseilles de bonne programmation en général)?

    Merci de votre aide, vous etes super !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pour la première question : http://qt.developpez.com/faq/?page=qt4Core#linkvtable

    Sinon il n'est pas conseillé de créer une variable QWidget par valeur, mais toujours par pointeur. D'ailleurs, pourquoi créer un widget ainsi par valeur qui sera détruit à la sortie du constructeur alors que la boîte de dialogue elle-même est vide

  3. #3
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut HELP !!
    J'ai fait un clean et cela a marché, merci.

    J'ai également mis QWidget * aWindow,... comme tu suggères mais je me suis pris un core dumped.

    A quoi c'est du ça ?

    Quelqu'un peux m'aider ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    La question que je me pose, c'est à quoi ce truc sert ?

  5. #5
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Je pense que pour lui, le aWindow est la boîte de dialogue à afficher, ce qui ne sert à rien ici, vu que Converter hérite de QDialog.
    Je pense qu'il faut, sans regarder en détails, c'est possible que j'oublie des trucs, virer ce aWindow, faire un setLayout avec le layout créé dans le constructeur, et afficher la boite de dialogue dans la fonction main avec aConverter.show().

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est aussi ce que je me dis, mais je voulais qu'il me le dise

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2014, 18h06
  2. Réponses: 11
    Dernier message: 05/08/2009, 12h30
  3. [ImageMagick] Header envoyé lors de la création d'une image
    Par KLiFF dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 25/10/2005, 16h35

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