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 :

Erreur de segmentation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut Erreur de segmentation
    Bonjour,
    j'ai un petit problème avec le code ci-dessous.
    quand je lance l'aplication le bouton dont le texte est "bouton1-visible" s'affiche normalement.
    mais quand je clique sur ce bouton il appelle une fonction qui plante(erreur de segmentation).

    voilà comment le code est "organisé" en gros:
    dans la fonction main,je créer un object de classe Manag qui contient une fonction filtering().
    le constructeur de Manag crée un autre objet de classe Shutdown de maniere a ce que la fonction filtering() puisse accéder à une fonction de la classe Shutdown qui est la fonction readData().
    Le constructeur créer un bouton et le lie à la fonction readData de Shutdown.
    quand le contructeur appelle filtering, filtering appelle readData() et il n'y a aucun probleme.
    mais quand on clique sur le bouton, on appelle filtering qui apelle readData et là il bug.
    Savez-vous pourquoi?

    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
    #include <QApplication>
    #include <QMainWindow>
    #include <QTabWidget>
    #include <QHBoxLayout>
    #include "tabClass"
    Manag::Manag(QWidget *tab)
    {
    	ShutdownG *shutdown=new ShutdownG(tab);
    	bouton=new QPushButton("bouton1-visible");
    	connect(bouton,SIGNAL(clicked()),this,SLOT(filtering()));
    	shutdown->readData();//pas de probleme
     
    }
    void Manag::filtering()
    {
    	shutdown->readData();//va poser un pb dans readData...pourtant c'est le même appel que dans le constructeur!
    }
    ShutdownG::ShutdownG(QWidget *tab)
    {
    	active=new QPushButton("bonton2-non visible c'est juste histoire d'ajouter un objet...");
    	b=new QPushButton("bonton3-non visible c'est juste pour histoire d'ajouter un objet...");
    	layout = new QVBoxLayout;
     
    	tab->setLayout(layout);
            layout->addWidget(active);///pas de probleme(aucune erreur de segmentation ou autres visiblement
    }
    void ShutdownG::readData()
    {	
    	layout->addWidget(b);//erreur de segmentation uniquement si appelé via Manag::filtering() par l'intermediaire d'un slot.
    }
    int main(int argc, char **argv)
    {
    	QApplication app(argc, argv);
     
    	QTabWidget *tabs=new QTabWidget;//on créer un objet pour notre liste de tabs
    	QWidget *matab=new QWidget;//on créer une tab
    	Manag netmag(matab);//rempli tab
    	tabs->addTab(matab,"Tab");//on ajoute notre tab dans la liste des tabs
     
     
    	netmag.bouton->show();
     
    	return app.exec();
    }
    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
    #include <QObject>
    #include <QPushButton>
    #include <QVBoxLayout>
    #include <QLayout>
    class ShutdownG 
    {
    	public:
    		ShutdownG(QWidget *tab);
    		void readData();
    		QVBoxLayout *layout;
    		QPushButton *active;
    		QPushButton *b;
    		int state;              
    };
    class Manag:public QObject
    {
    Q_OBJECT	
    	public :
      		Manag(QWidget *tabShutdown);
    		ShutdownG *shutdown;
    		QPushButton *bouton;
    	public slots:
    		void filtering();
    };
    merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    L'erreur est à la première ligne de code : redéclaration locale de shutdown, ton membre n'est jamais instancié.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    oula l'erreur stupide!!(non liée à Qt en plus désolé...^^) bon c'est effectivement cette déclaration qui pose problème merci beaucoup

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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