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

Discussion :

Problème avec Q_Object et les SLOTS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut Problème avec Q_Object et les SLOTS
    Bonjour tout le monde !

    Voila j'aimerai faire un menu principal de trois boutons. Le bouton quitter ne pose pas de problème est marche sans soucis le problème étant les autres.

    En effet des que je veux que le bouton enclenche une fonction la compilation ne se lance pas.

    Je suis sous Qt Creator et il me retourne : test.exe s'est terminé avec le code -1073741819

    Par contre si je retire "Q_Object" et "slots :" il s'exécute sans soucis mais bien sur les boutons ne font rien du tout.

    voila la classe qui contient le "Q_Object" (Pour info la fonction qui dois s'enclencher quand on active le bouton n'est qu'un test pour voir sur le bouton fonctionne ou non ^^) :

    menu.h
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class menu : QObject
    {
    Q_OBJECT
    private:
        QGridLayout *gridLayout ;
        QPushButton *aide ;
        QPushButton *jouer ;
        QPushButton *quitter ;
    public:
        menu(QWidget * parent) ;
    public slots :
     
       void affichermenu() ;
    } ;


    menu.cpp
    Code C++ : 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
     
    #include "menu.h"
     
    menu::menu(QWidget * parent)
    {
        gridLayout = new QGridLayout;
     
     
        aide = new QPushButton(tr("Aide"), parent);
        aide->setFont(QFont("Onyx", 18, QFont::Bold));
     
     
        jouer = new QPushButton(tr("Jouer"), parent);
        jouer->setFont(QFont("Onyx", 18, QFont::Bold));
        parent->connect(jouer, SIGNAL(clicked()), this, SLOT(affichermenu()));
     
        quitter = new QPushButton(tr("Quitter"), parent);
        quitter->setFont(QFont("Onyx", 18, QFont::Bold));
        parent->connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
     
        quitter->setStyleSheet("QPushButton{background-image:url(fondbuton.png);}");
        jouer->setStyleSheet("QPushButton{background-image:url(fondbuton.png);}");
        aide->setStyleSheet("QPushButton{background-image:url(fondbuton.png);}");
     
        quitter->setMaximumSize(70,40);
        aide->setMaximumSize(70,40);
        jouer->setMaximumSize(70,40);
     
        gridLayout->addWidget(jouer, 1, 1);
        gridLayout->addWidget(aide, 2, 1);
        gridLayout->addWidget(quitter, 3, 1);
        parent->setLayout(gridLayout);
    }
     
    void menu::affichermenu()
    {
        quitter->~QWidget();
    }

    Pour info c'est mon premier dev en C++ ^^.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2009
    Messages : 69
    Par défaut
    Salut

    Sa c'est pas propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void menu::affichermenu()
    {
        quitter->~QWidget(); // On appel pas un destructeur comme ça
    }
    On utilise Delete.

    Et là si tu hérite d'une class Qt ton destructeur sera appelé directement en Quittant.

    Sinon compile en Debug ou fais du debuggage car ton slot est donc pas bon.

    Et pense à faire un clean du projet avant chaque nouveau test.

    Remplace ton :
    Par par exemple l'affichage d'une QMessage box ou un qDebug().

    Pour les Menu tu peux utilisé le signal Triggered.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2009
    Messages : 122
    Par défaut
    En lançant le debuggage il me retourne une msgbox avec comme erreur :
    L'inférieur a stoppé car il a reçu un signal du système d'exploitation.
    Nom du signal : SIGSEGV
    Signification du signal : Segmentation fault
    Et je ne peux pas passer cette erreur.
    Elle se trouve dans la fonction : "QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData>>:ata"
    Dans qcopedpointer.h .

    Pour ce qui est du destructeur je suis au courant, je voulais d'ailleurs mettre une msgbox à la place mais le problème c'est que là encore j'ai une erreur. Si je remplace bêtement :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    quitter->~QWidget();

    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QMessageBox::information(this, "Vérification", "Le chemin est valide.");
    En ajoutant QMessageBox il me retourne une erreur me signalant l'erreur suivante : No matching function for call to :"QMessageBox..."

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    En ajoutant QMessageBox il me retourne une erreur me signalant l'erreur suivante : No matching function for call to :"QMessageBox..."
    Tu as bien fais l'include nécessaire ?
    Quand est ce que ton application plante ? Au moment où tu la lances ? Ou au moment ou tu cliques sur bouton ?
    Peux tu nous montrer ton main ?

    G.

Discussions similaires

  1. Problème avec eXist et les entité
    Par krosian dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 25/05/2007, 12h09
  2. [Conception] problème avec firefox sur les champs input type="file"
    Par maverick56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 11/05/2007, 10h57
  3. Réponses: 8
    Dernier message: 03/05/2007, 17h31
  4. problème avec JDIC et les TrayIcon
    Par arasium dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 17/07/2006, 13h40
  5. Problème avec ifstream et les headers
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 29/07/2005, 03h33

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