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

 C++ Discussion :

Valeur d'attribut inatteignable (utilise Qt)


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut Valeur d'attribut inatteignable (utilise Qt)
    Coucou,

    j'ai un petit soucis d'obtention d'un attribut d'une classe depuis une autre.


    mon code se compose des fichiers suivants :

    main.cpp
    MainFrame.cpp
    MainFrame.h
    EditorFrame.h
    EditorFrame.cpp

    le code du main où je crée mon objet window de classe MainFrame.
    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
     
    #include <QApplication>
    #include <QtGui>
    #include "MainFrame.h"
    #include "EditorFrame.h"
     
    int main(int argc, char *argv[])
    {
    	QApplication app(argc, argv);
    	MainFrame window;
    	window.show();
     
     
     
    	return app.exec();
    }
    Mon MainFrame.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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    #include "MainFrame.h"
    using namespace std;
     
    MainFrame::MainFrame()
    {
    	setFixedSize(400,600);
     
    	//GroupBox Definition de la classe
    	QGroupBox *definitionClasse = new QGroupBox("Définition de la classe");// déclaration du groupebox classe
    	definitionClasse->setMaximumHeight(90);
    		QFormLayout *defClasse = new QFormLayout;				// Ajout d'un formulaire contenant 2 lignes de texte appartenant au Groupbox defclasse
    			QLineEdit *nameLineEdit = new QLineEdit;						// Définition des lignes de texts
    			QLineEdit *classeLineEdit = new QLineEdit;
    			defClasse->addRow("Nom : ", nameLineEdit);							// Ajout des lignes dans le formulaire
    			defClasse->addRow("Classe parente : ", classeLineEdit);
     
    		definitionClasse->setLayout(defClasse);				// Intégration du formulaire dans le groupbox
     
     
    	// GroupeBox Option
    	QGroupBox *option = new QGroupBox("Optio&ns");					
    		QCheckBox *cBox_protegeHeader = new QCheckBox("Pro&teger le header contre les boucles infinies",option);	// Creation des 3 boutons checkable
    		QCheckBox *cBox_constructDefaut = new QCheckBox("Gene&rer un constructeur par défaut",option);
    		QCheckBox *cBox_genererDestruct = new QCheckBox("Generer &le destructeur",option);
     
    		QVBoxLayout *VBoxOption = new QVBoxLayout(option);														// Creation d'un VBox pour les 3 bouttons
    			VBoxOption->addWidget(cBox_protegeHeader);
    			VBoxOption->addWidget(cBox_constructDefaut);
    			VBoxOption->addWidget(cBox_genererDestruct);
     
    		option->setLayout(VBoxOption);											// Ajout du VBox dans le groupebox
     
     
    	//GroupeBox Commentaires
    	QGroupBox *addComment = new QGroupBox("&Ajouter des commentaires");
    		addComment->isCheckable();
    		addComment->setCheckable(1); // Ajoute la croix
     
    		QFormLayout *commentaireFormLayout = new QFormLayout; // Ajout d'un formlayout
    			QLineEdit *auteurLineEdit = new QLineEdit;			// définition des éléments du formulaire
    			QDateEdit *dateCreaDateEdit = new QDateEdit(QDate::currentDate());
    			QTextEdit *descriptionTextEdit = new QTextEdit;
     
    			commentaireFormLayout->addRow(tr("A&uteur : "),auteurLineEdit);			// Ajout des lignes dans le formulaire
    			commentaireFormLayout->addRow(tr("Date de &création : "),dateCreaDateEdit);
    			commentaireFormLayout->addRow(tr("De&scription : "), descriptionTextEdit);
     
    		addComment->setLayout(commentaireFormLayout);			// Ajout du formulaire dans le groupbox
     
    	// PushButton
    			QPushButton *pButton_generer = new QPushButton("Générer");		// Ajout de 2 boutons poussoirs
    			QPushButton *pButton_quitter = new QPushButton("Quitter");
     
    	// QHBox pour les PushButton
    	QHBoxLayout *HBox_boutton = new QHBoxLayout;						// Définition d'un HBox et ajout des 2 bouttons
    		HBox_boutton->addWidget(pButton_generer);
    		HBox_boutton->addWidget(pButton_quitter);
    		HBox_boutton->setAlignment(Qt::AlignRight);
     
     
     
    	//Vertical box
    	QVBoxLayout *layoutPrincipal = new QVBoxLayout(this);
    		layoutPrincipal->addWidget(definitionClasse); // Ajout du layout de groupebox
    		layoutPrincipal->addWidget(option); // Ajout du layout de groupebox
    		layoutPrincipal->addWidget(addComment); // Ajout du layout de groupebox
    		layoutPrincipal->addLayout(HBox_boutton);
     
     
     
    		this->setLayout(layoutPrincipal);				// Ajout du VBox dans la fenetre principale
     
    		/***** DEFINITION DES SIGNAUX *****/
    		QString test= "Coucou" ;
    		connect(pButton_quitter,SIGNAL(clicked()),this,SLOT(close()));
    		connect(pButton_generer,SIGNAL(clicked()),this,SLOT(open_gen()));
     
    		/***** Recupération des variables *****/
     
     
    		QString nom = nameLineEdit->text();
    		QString classeParente = classeLineEdit->text();
    		QString nomauteur = auteurLineEdit->text();
    		QString description = descriptionTextEdit->toPlainText();
     
    }
     
    MainFrame::~MainFrame()
    {
       // delete m_label;
     
    }
     
    void MainFrame::open_gen()
    {
    	//QMessageBox::information(this,"Bonjour",this->nomauteur);
    	EditorFrame windowsGen;
    	windowsGen.exec();
     
    }
     
    QString MainFrame::getDescription()
    {
    	return nomauteur;
    }
    MainFrame.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
    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
    63
    64
     
    #ifndef HEADER_H_MAINFRAME
    #define HEADER_H_MAINFRAME
    #include <QApplication>
    #include <QWidget>
    #include <QLabel>
    #include <QFormLayout>
    #include <QLineEdit>
    #include <QString>
    #include <QGroupBox>
    #include <QVBoxLayout>
    #include <QCheckBox>
    #include <QDateEdit>
    #include <QTextEdit>
    #include <QPushButton>
    #include "EditorFrame.h"
     
     
     
    class MainFrame : public QWidget
    {
    	Q_OBJECT
    public:
    	MainFrame();
    	~MainFrame();
    	QString getDescription();
     
     
     
    public slots:
    	void open_gen();
     
     
    private:
     
    	QDateEdit *dateCreaDateEdit;
    	QCheckBox *cBox_protegeHeader;
    	QCheckBox *cBox_constructDefaut;
    	QCheckBox *cBox_genererDestruct;
    	QFormLayout *commentaireFormLayout;
    	QFormLayout *defClasse;
        QGroupBox *definitionClasse;
    	QGroupBox *addComment;
    	QGroupBox *option;
    	QLineEdit *nameLineEdit;					
    	QLineEdit *classeLineEdit;
    	QLineEdit *auteurLineEdit;
    	QVBoxLayout *fenetrePrincipale;
    	QVBoxLayout *layoutPrincipal;
    	QVBoxLayout *VBoxOption;
    	QHBoxLayout *HBox_boutton;
    	QPushButton *pButton_generer;
    	QPushButton *pButton_quitter;
    	QTextEdit *descriptionTextEdit;
     
    	QString nom;
    	QString classeParente;
    	QString nomauteur;
    	QString description;
     
    };
     
     
    #endif
    EditorFrame.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
     
    #include "EditorFrame.h"
    #include "MainFrame.h"
    using namespace std;
     
    EditorFrame::EditorFrame(QString description)
    {
     
    	QVBoxLayout *contenant = new QVBoxLayout;
    	QTextEdit *textedit = new QTextEdit(this);
    		QPushButton *m_quitter = new QPushButton;
     
    		contenant->addWidget(textedit);
    		contenant->addWidget(m_quitter);
     
    		this->show();
     
     
    }
     
    EditorFrame::EditorFrame()
    {
    	description = window.getDescription();  // ERREUR EditorFrame.cpp(22) : error C2228: left of '.getDescription' must have class/struct/union
    	QVBoxLayout *contenant = new QVBoxLayout;
    		QTextEdit *textedit = new QTextEdit(this);
    		QPushButton *m_quitter = new QPushButton;
     
    		contenant->addWidget(textedit);
    		contenant->addWidget(m_quitter);
     
    		textedit->setText(description);
     
    		this->show();
     
     
    }
     
    EditorFrame::~EditorFrame()
    {
     
    }
    EditorFrame.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
     
    #ifndef HEADER_H_EDITORFRAME
    #define HEADER_H_EDITORFRAME
    #include <QApplication>
    #include <QWidget>
    #include <QMessageBox>
    #include <QString>
    #include <QPushButton>
    #include "MainFrame.h"
    #include <QDialog>
     
     
     
    class EditorFrame : public QDialog
    {
    public:
    	EditorFrame(QString description);
    	EditorFrame();
    	~EditorFrame();
     
    private:
    	QString description;
    };
     
     
    #endif
    Et j'obtiens cette erreur sous VC++2k8:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1>.\EditorFrame.cpp(22) : error C2228: left of '.getDescription' must have class/struct/union
    Et sous mingw32 en console Qt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EditorFrame.cpp:22: error: insufficient contextual information to determine type
    Voila, j'ai beau retourner la question dans tous les sens , je comprend po

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    La variable window est définie dans la méthode main(). Donc je vois mal comment tu pourrais accéder à cette variable... Après je dis ça je dis rien...

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    bah l'objet window est instancié dans le main, ses méthodes/attributs sont accessibles par window.methode(); ou window.attribut; .

    Ou alors j'ai rien compris

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Neocid Voir le message
    bah l'objet window est instancié dans le main, ses méthodes/attributs sont accessibles par window.methode(); ou window.attribut; .

    Ou alors j'ai rien compris
    Bonjour,
    Comme te l'as dit atha2, ta variable window est définie localement dans le main, donc dans tes autres classes, elle n'est pas visible (cf http://c.developpez.com/cours/poly-c...=page_1#LI-E-2).

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Ok merci,

    je dois donc creer mon objet EditorFrame dans mon main pour qu'il y ai accès (au lieu de le creer dans l'instance de mon MainFrame) ?

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    La question est plutôt de savoir qui fait appel à qui, et qui connait qui. Si les EditorFrame doivent faire des traitements, sans se préoccuper de l'appelant, qu'ils n'ont pas besoin de connaître la fenêtre, il suffit qu'ils renvoient un message avec le résultat du traitement demandé. S'ils doivent effectuer un traitement sur l'appelant, par exemple afficher quelque chose sur la fenêtre, il faut que tu passes la fenêtre soit en argument aux méthodes de la classe, soit au constructeur de la classe, éventuellement pour placer une référence dans l'objet.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    je vois, merci pour la précision

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

Discussions similaires

  1. [clone] cloner également la valeur des attributs
    Par danyboy85 dans le forum Langage
    Réponses: 25
    Dernier message: 08/07/2006, 00h00
  2. Réponses: 18
    Dernier message: 03/03/2006, 18h19
  3. changer la valeur des attribut
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/02/2006, 14h27
  4. [Custom Tags 1.2] Passer une variable comme valeur d'attribut d'un tag jsp
    Par Pi2 dans le forum Taglibs
    Réponses: 7
    Dernier message: 16/09/2005, 14h44
  5. [Débutant] somme de la valeur d'attributs...
    Par SteelBox dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 10/07/2004, 22h38

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