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 :

probleme de code Qt: signal and Slot


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut probleme de code Qt: signal and Slot
    bonjour !
    je souhaiterais faire un programe de gestion de location, je vien juste de le commencer, et je n'arrive pas a le compiler.
    a la compilation(codeblock avec mingw32), il me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Switching to target: default
    Compiling: window.cpp
    Compiling: main.cpp
    Linking executable: C:\C++\Location Manager\Location Manager.exe
    .objs\window.o:window.cpp:(.text+0x170): undefined reference to `vtable for MainWindow'
    .objs\window.o:window.cpp:(.text+0x17c): undefined reference to `vtable for MainWindow'
    .objs\window.o:window.cpp:(.text+0x3a4): undefined reference to `vtable for MainWindow'
    .objs\window.o:window.cpp:(.text+0x3b0): undefined reference to `vtable for MainWindow'
    .objs\window.o:window.cpp:(.text$_ZN10MainWindow2trEPKcS1_[MainWindow::tr(char const*, char const*)]+0x1c): undefined reference to `MainWindow::staticMetaObject'
    .objs\main.o:main.cpp:(.text$_ZN10MainWindowD1Ev[MainWindow::~MainWindow()]+0xb): undefined reference to `vtable for MainWindow'
    .objs\main.o:main.cpp:(.text$_ZN10MainWindowD1Ev[MainWindow::~MainWindow()]+0x17): undefined reference to `vtable for MainWindow'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 8 seconds)
    si je supprime la ligne Q_OBJECT(window.h), il marche mais ne peux pas utiliser la fonction about(); de mainWindow en passant par connect.

    voici mon code :

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "window.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        MainWindow window;
        window.show();
        return app.exec();
    }
    window.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
    #include <QMainWindow>
    #include <QtGui>
    #include <QApplication>
    #include <QMessageBox>
    #include <QObject>
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
        public:
            MainWindow();
     
        private slots:
            void inserer();
            void au_sujet();
            void aide();
     
        private:
            QMenu *file_menu;
            QMenu *aide_menu;
            QAction *inserer_act;
            QAction *about_act;
            QAction *aide_act;
            QMessageBox *message_about;
     
            void createActions();
            void createMenus();
     
    };
    window.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
    #include "window.h"
     
    MainWindow::MainWindow()
    {
        statusBar()->showMessage(tr("Bienvenue !"));
     
        setWindowTitle(tr("Location Manager"));
        setMinimumSize(160, 160);
        resize(480, 320);
     
        createActions();
        createMenus();
    }
     
    void MainWindow::inserer()
    {
    }
     
    void MainWindow::au_sujet()
    {
        QMessageBox::about(this, tr("About Menu"),tr("The <b>Menu</b> example shows how to create ""menu-bar menus and context menus."));
    }
     
    void MainWindow::aide()
    {
    }
     
    void MainWindow::createActions()
    {
        inserer_act = new QAction(tr("&Inserer"), this);
        inserer_act->setShortcut(tr("Ctrl+K"));
        inserer_act->setStatusTip(tr("Enregistrer une reservation"));
        connect(inserer_act, SIGNAL(triggered()), this, SLOT(inserer()));
     
        about_act = new QAction(tr("&Au sujet de"), this);
        about_act->setShortcut(tr("Ctrl+M"));
        about_act->setStatusTip(tr("Voir les informations relative a cette application"));
        connect(about_act, SIGNAL(triggered()), this, SLOT(au_sujet()));
     
        aide_act = new QAction(tr("&Aide"), this);
        aide_act->setShortcut(tr("Ctrl+P"));
        aide_act->setStatusTip(tr("Aide, pour vous aider a utiliser ce programme"));
        connect(aide_act, SIGNAL(triggered()), this, SLOT(aide()));
    }
     
    void MainWindow::createMenus()
    {
        file_menu = menuBar()->addMenu(tr("&Fichier"));
        file_menu->addAction(inserer_act);
     
        aide_menu = menuBar()->addMenu(tr("&Aide"));
        aide_menu->addAction(aide_act);
        aide_menu->addAction(about_act);
    }
    a ce que j'ai compris, j'ai besoin de la macro Q_OBJECT pour pouvoir utiliser des SLOT particulier, mais comme vous le voyer, ca ne marche pas
    comment faire pour pouvoir faire fonctionner le prog(la fonction mainwindow::about() n'est q'une boite de texte)
    j'attent vos reponse avec impatience !

    PS : je suis en vacance 7 semaine, alors si je ne repond pas c'est normal(vous avez deja vu une connection internet sur un bateau vous ????

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par vivh349
    j'attent vos reponse avec impatience !

    PS : je suis en vacance 7 semaine, alors si je ne repond pas c'est normal(vous avez deja vu une connection internet sur un bateau vous ????
    Ces deux expressions me semblent incompatibles.

    Bonnes vacances

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut
    je vais attendre avec impatience de pouvoir verifiez si vous m'avez repondu
    je remercie au passage thewho pour cette reponse claire nette et precise, qui m'aide bien a resoudre mon probleme

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par vivh349
    je vais attendre avec impatience de pouvoir verifiez si vous m'avez repondu
    je remercie au passage thewho pour cette reponse claire nette et precise, qui m'aide bien a resoudre mon probleme
    Désolé, mais je vais me répéter :
    Demander de l'aide en disant
    j'attent vos reponse avec impatience !
    pour ajouter immédiatement après
    PS : je suis en vacance 7 semaine, alors si je ne repond pas c'est normal(vous avez deja vu une connection internet sur un bateau vous ????
    sont deux lignes incompatibles.

    Si tu es pressé, il ne fallait pas ajouter la précision concernant tes vacances.

    Et si c'était un gag, tu peux constater que c'est manqué.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut
    franchement je suis degouté...
    parler pour ne rien dire...
    je voulais juste dire que je partais en vacances et que je ne pourrais pas repondre, car certaines personnes s'enerve quand on reponds pas qlq jours apres(je les comprends c'est penible de ne pas avoir de reponses quand on est content de donne son avis ou de pouvoir aide)

    mais je ne vois pas pourquoi je ne pourrais pas etre impatient d'avoir vos reponses ! je vais m'impatienter pendans une semaine en attendans vos reponses !!!!
    enfin maintenant je suis rentrer.

    mais bon ce n'ai pas un forum de francais ici !!! c'est un forum de PROGRAMMATION !!!
    quand aux autre, si vous avez des idees...
    *@c++

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Test vacances furent courtes.

    Le problème que tu as est expliqué dans l'aide de QT. Vas voir ce qu'ils disent à propos de Meta-Object Compiler (sur la 1ère page de l'aide, choisir "All Tools").

    Avec quels outils développes-tu ?

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    212
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 212
    Par défaut
    Je sais que c bête comme question mais on sait jamais.
    Est ce que tu as un fichier qui s'appelle "moc_window.cpp" dans ton projet?

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,
    Citation Envoyé par mambo
    Je sais que c bête comme question mais on sait jamais.
    Est ce que tu as un fichier qui s'appelle "moc_window.cpp" dans ton projet?
    Ce n'est pas obligatoire, selon quels outils de QT on utilise, et comment (voir qmake)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Par défaut
    bonjour !
    alors, thewo, j'ai trouve dans l'aide de qt, mais a qmake, qui soccupe du moc.
    pour creer ce qu'il faut :
    1)creer un fichier projet.pro, avec dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CONFIG += qt
    HEADERS += window.h
    SOURCES += window.cpp
    SOURCES += main.cpp
    TARGET = nom du projet
    puis faire, en mettant ce quil faut dans le path

    rep du projet>qmake -o Makefile nom_du_fichier_pro.pro

    et ensuite
    repduprojet>make.

    pour utiliser code block : dans cb,dans vot projet, ajouter le fichier moc_***.cpp qui ce trouve dans repprojet/debug
    norùmalement ca tourne !

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Tu n'as pas vraiment besoin de tout ça:

    Dans Code::Blocks, tu vas dans Project/Build options

    Et tu remplis comme ceci:


    Cela t'évite de créer le fichier .pro à la main, et d'inclure tous les fichiers moc_*.cpp dans ton projet.

    Bon développements.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 171
    Par défaut
    J'est fait se que vous dite mais sa marche pas, voila le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Running project pre-build steps
    qmake -project
    Execution of 'qmake -project' in 'C:\Documents and Settings\Administrateur\Mes documents\espace de travail\cpp\testqt' failed.
    Nothing to be done.

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

Discussions similaires

  1. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  2. [VB.Net] Probleme popup code behind
    Par balibo dans le forum ASP.NET
    Réponses: 19
    Dernier message: 17/10/2005, 12h22
  3. probleme de code formulaire
    Par bachilbouzouk dans le forum ASP
    Réponses: 45
    Dernier message: 13/04/2005, 10h01
  4. [debutant] probleme de code :-(
    Par flogreg dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 16/08/2004, 18h20

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