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 :

acces données d'une fct à une autre, (Qt4)


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut acces données d'une fct à une autre, (Qt4)
    bon voilà, j'ai 1 pb:

    j'ai plusieurs fonctions ds une classe dont :

    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
    
    void ClasseA::data(vector <float> données){
    
            newVector=données;
    
    }
    
    qui me permet de récupérer des données d'une autre classe 
    
    et 
    
    void ClasseA::paintEvent(QPaintEvent*){  
    
    QPainter painter;
    painter.begin(this);
    ....
    ici, j'ai besoin de newVector pour afficher ces données sous forme de graphe
    
    ...
    ...
    ...
    bla, bla, bla
    }
    la question est simple: comment faire pour récupérer les données dans ClasseA::paintEvent via newVector (ou autre)?

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Qt est une bibliothèque C++.
    Avant de l'utiliser il convient d'apprendre un minimum le C++!

    Question à déplacer donc, vers un forum C++, ou plutôt à rechercher dans n'importe quel tutoriel ou bouquin de C++ !

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut

    tu débute??
    Si tu ne sait pas ca, prend du temps à apprendre le C++ (ce n'est qu'un conseil... le prend pas mal).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A
    {
     
    ...
    vector<float> newvector;
    }
     
    ...
     
    void A::f()
    {
    cout<<newvector.size()<<endl;
    }

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    ...c'est exactement çà, je débute, c'est mal?

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Mongaulois Voir le message

    tu débute??
    Si tu ne sait pas ca, prend du temps à apprendre le C++ (ce n'est qu'un conseil... le prend pas mal).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A
    {
     
    ...
    vector<float> newvector;
    }
     
    ...
     
    void A::f()
    {
    cout<<newvector.size()<<endl;
    }

    là, tu affiches la taille du vecteur, je vois pas le rapport avec ce que je veux faire:

    récupérer les données d'un vecteur d'une autre classe pour pouvoir les traiter et dessiner des graphes à partir de ces données, je vois pas comment un cout<<newvector.size()<<endl; répond à ma question...

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    rhaaa.
    J'aurais du regarder avant de finir la réponse

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par ostralo Voir le message
    là, tu affiches la taille du vecteur, je vois pas le rapport avec ce que je veux faire:
    Ben tu dit vouloir accéder au element d'un vecteur. Si tu peut accéder à sa taille, tu peut faire ce que tu veut avec

    On as pas du comprendre ton problème alors.

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par ostralo Voir le message
    ...c'est exactement çà, je débute, c'est mal?
    bien sur que non. Ce ne sont pas des critiques, au contraire.
    Mais utiliser Qt pour débuter en C++, ce n'est pas le meilleur chemin...

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    ...le truc, c'est que j'arrive déjà à faire cette manip ailleurs dans le programme avec

    des get/set

    mais là ça bloque et je me demandais si c'était pas à cause de Qt??

    alors j'essaie de glaner des infos (j'ai quand même qqs notions de C++)

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Aurais tu un peu de code à nous montrer?

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    En gros :

    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
    
    ClassA{
    
    .....       vector <float> data=des_données_float;
                 
    ....
                  ClassB vector;
    	       vector.SetData(data);
    ...
    
    }
    void ClassB::SetData(vector <float> data) {
    	newData=data;
    }
    
    
    vector <float>  ClassB::GetData() {
    	return newData;
    }
    
    void ClassB::paintEvent(QPaintEvent*){
                  
                  ClassB vector;
    	       vector <float> data1=vector.GetData();
    
    		QPainter painter;
    		painter.begin(this);
    
    .....	
    
    }
    
    newData est déclaré en private dans le .header de ClassB
    
    il est initialisé dans le constructeur comme suit :
    
    ClassB::ClassB{
    ....
    newData.reserve(30);
    
    
    }
    le pb est que le Get donne n'importe quoi alors que le Set donne les bonnes valeurs (vérifié avec des cout sur des boucles), pb de référence??

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         vector <float> data=des_données_float;
                 
    ....
                  ClassB vector;
    Il faut mieux eviter d'appeler une instance avec le nom d'une class...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ClassB vector;
    vector <float> data1=vector.GetData();
    vector n'as jamais été initialisé[edit]!!!!donc tu as n'importe quoi.

    De ce que j'ai compris, la réponse à ta question est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void ClassB::paintEvent(QPaintEvent*)
    {
         vector <float> data1= GetData();
     
    		QPainter painter;
    		painter.begin(this);
     
    .....	
     
    }
    [edit]
    enfin ce que je voulais dire est que vector n'as pas de donnée

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     ClassB vector;
    vector <float> data1=vector.GetData();
    vector n'as jamais été initialisé[edit]!!!!donc tu as n'importe quoi.


    De ce que j'ai compris, la réponse à ta question est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void ClassB::paintEvent(QPaintEvent*)
    {
         vector <float> data1= GetData();
     
    		QPainter painter;
    		painter.begin(this);
     
    .....	
     
    }
    [edit]
    enfin ce que je voulais dire est que vector n'as pas de donnée
    c'est exact mais le pb est plus profond car dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vector <float>  ClassB::GetData() {
    	return newData;
    }
    si je fais une boucle sur newData, ça donne n'importe quoi aussi. Sans doute un pb d'initialisation aussi? Le fait de le déclare dans private du header puis de l'initialiser dans le constructeur de la classe c'est bon? ou c'est n'importe quoi aussi?

    autre truc, tu dis qu'il faut mieux eviter d'appeler une instance avec le nom d'une class...

    Je vois pas comment on fait autrement?

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par ostralo Voir le message

    si je fais une boucle sur newData, ça donne n'importe quoi aussi. Sans doute un pb d'initialisation aussi? Le fait de le déclare dans private du header puis de l'initialiser dans le constructeur de la classe c'est bon? ou c'est n'importe quoi aussi?
    Non, c'est correcte. Il faudrait un vrai code et non un pseudo code, se serait bien plus simple.

    Citation Envoyé par ostralo Voir le message
    autre truc, tu dis qu'il faut mieux eviter d'appeler une instance avec le nom d'une class...
    Tu n'as pas compris. Dans ton exemple, tu intancie une ClassB sous le nom de vector. Hors vector est aussi le nom d'une class template

    [edit]
    j'ai déplacé ton thread dans le forum C++ qui est plus adapté.
    Pour info, tu as aussi un problème de copie et recopie et recopie de tout les côté... Mais chaque chose en son temps (on verra après ton problème)
    [edit]

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    OK, en fait je fais pas un ClassB vector; c'est générique (change vector par bob par ex). Pour le vrai code, je veux bien mais c'est trop gros et la partie qui nous intéresse est résumé dans le pseudo-code, c'est vraiment utile?

    En tout cas, je ne comprends toujours pas pourquoi dans la fonction Get, newData donne pas les bonnes valeurs récupérées par Set??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    vector <float>  ClassB::GetData() {
     
    	int i;
    	for (i=0;i<10;i++){
    	  cout<< "get: " << newData[i] << endl;
           }
    	return newData;
     
    }
    ??

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ben je ne te demande pas tout le code bien sur. Mais un peu de code ca aide à aider.
    Peut tu faire une exemple tout bête qui utilise ta classB?
    ou le code de ClassB (les parties importante(créateur, .h, quelques fonction, ...).

    Dsl, mais tu ne donne rien qui permettre de trouver ton problème

  17. #17
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    OK,
    ma classe A comporte pas mal de fonctions et de variables mais c'est le vecteur data qui m'intéresse.
    ClassA.h

    class GUI : public QMainWindow{

    Q_OBJECT


    public:

    GUI(QWidget *parent=0);
    ~GUI();


    private:

    ....beaucoup de variables
    vector <float> myData; <<<< c'est ce vecteur qui m'intéresse



    private slots:

    ....une dizaine de fonction
    void DrawIds(bool drag=false); <<< c'est dans cette fonction que je fais un Set
    void paintEvent(QPaintEvent*);


    Dans le .cpp,

    classA.cpp

    GUI::~GUI(){
    ......
    myData.reserve(30);
    ......
    }


    void GUI:: DrawIds(){

    .....
    classB data;
    data.SetData(myData);

    class B * pDraw;
    pDraw = new classB;
    pDraw->show();
    .......

    }
    classB.h

    using namespace std;


    class ClassB : public QWidget {

    Q_OBJECT


    public:


    ClassB (QWidget *parent=0);


    void ClassB ::SetData(vector <float> myData);
    vector <float> ClassB ::GetData();



    private:

    Ui_classB DrawGraph;

    vector <float> newData;
    vector <float> INFO;

    char * SourceName;

    public slots:

    void paintEvent(QPaintEvent*);

    };
    Enfin classB.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
     
    classB::classB(QWidget *parent) : QWidget(parent) {
    	this->DrawGraph.setupUi(this);
    	newData.reserve(30);
    }
     
    void classB::SetData(vector <float> myData) {
    	newData=myData;
    	int i;
    	for (i=0;i<10;i++){
    	cout<< "set: " << newData[i] << endl;
            }
    }
     
     
    vector <float>  classB::GetData() {
    	int i;
    	for (i=0;i<10;i++){
    	cout<< "get: " << newData[i] << endl;
           }
    	return newData;
    }
     
    void classB::paintEvent(QPaintEvent*){
     
    .....
    		QPainter painter;
    		painter.begin(this);
     
    		classB obj;
    		vector <float> dude=obj.GetData();
     
     ////////là commence la partie graphique
     
    		painter.setPen(QColor(0,0,0));
    		painter.setFont(QFont("Helvetica", 11, 11, false));
    .....
     
    }

    voilà, si ça peut faire avancer, et merci pour votre aide!

  18. #18
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    ...
    mouais bon ben c'est mieux que rien....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void GUI:: DrawIds(){
     
    .....
    classB data;
    data.SetData(myData);
     
    class B * pDraw;
    pDraw = new classB;
    pDraw->show();
    .......
     
    }
    qu'es ce que data? qu'es ce que pDraw??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    classB obj;
    vector <float> dude=obj.GetData();
    que croie tu récupérer dans dude???
    C'est vraiment un peu tôt pour commencer Qt. Prend un peu de temp à comprendre le C++. Ce n'est qu'un conseil.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 16h57
  2. [RegExp] Détecter des combinaisons dans une chaine une par une
    Par vermine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2010, 13h22
  3. Réponses: 21
    Dernier message: 20/09/2009, 10h50
  4. Valeur d'e variable d'une fct dans autre fonction
    Par Torpedox dans le forum Langage
    Réponses: 3
    Dernier message: 11/11/2005, 08h48
  5. Acces a un control depuis une autre classe
    Par schnito dans le forum MFC
    Réponses: 5
    Dernier message: 25/01/2004, 22h14

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