Transmission de donnée C++
electrikBoy
Messages postés
27
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Actuellement sous un projet Qt, j'aimerais savoir comment on peut transmettre des données d'une classe à une autre. J'ai essayer avec les accesseurs mais je n 'y arrive pas.
Quelqu'un peut m'aider svp?
Merki
Actuellement sous un projet Qt, j'aimerais savoir comment on peut transmettre des données d'une classe à une autre. J'ai essayer avec les accesseurs mais je n 'y arrive pas.
Quelqu'un peut m'aider svp?
Merki
A voir également:
- Transmission de donnée C++
- Supprimer les données de navigation - Guide
- Cette valeur ne correspond pas aux restrictions de validation des données pour cette cellule ✓ - Forum MacOS
- Tnt base de données vide ✓ - Forum TNT / Satellite / Réception
- La base de données de sécurité du serveur n'a pas de compte d'ordinateur pour la relation ✓ - Forum Réseau
- Reinstaller windows sans perte de données - Guide
4 réponses
Voila mes fichiers .h
class MyWindow : public QMainWindow
{
Q_OBJECT // Permit to use slot
protected :
QDialog *Fen;
QTextEdit *S;
QVBoxLayout *B;
QString File;
int NumberElectrode;
int NumberSample;
float MaxActivity;
float MinActivity;
int XStep;
int YStep;
int ZStep;
QString **Coord;
QDataStream **mat;
protected slots :
void message();
public :
MyWindow ();
void Read (QString);
int NumberOfElectrode(QString, QTextStream&);
int NumberOfSample(QString, QTextStream&);
float SearchMin (QString, QTextStream&);
float SearchMax (QString, QTextStream&);
int SearchXStep (QString, QTextStream&);
int SearchYStep (QString, QTextStream&);
int SearchZStep (QString, QTextStream&);
void ReadCoord(QString, QTextStream&);
void ReadBin(QDataStream&);
int GetNbElec();
QString getFile();
};
class ColorMap : public QWidget
{
protected :
public :
ColorMap();
};
Je souhaite récupérer les protected de la classe MyWindow dans ColorMap.
J'ai fait cà :
MyWindow :: MyWindow() : QMainWindow() //Creation of the main window, MyWindow herits of the class QMainWindow
{
QMenu *menuFichier = menuBar()->addMenu("&Fichier"); //Add a menu bar
QAction *Open = new QAction("Open", this); //Add a action
menuFichier->addAction(Open); //Join the action to the bar
setFixedSize (600,300); // Dimension of the window
NumberElectrode=NumberSample=MaxActivity=MinActivity=YStep=XStep=ZStep=0;
/*Creation of th matrice which will contain coordinates and ID*/
Coord=new QString*[NumberElectrode];
for(int i=0; i<NumberElectrode; i++)
{
Coord[i]=new QString[4];
}
/*Creation of the matrice which will contain the bin data*/
mat=new QDataStream *[NumberSample];
for (int k=0; k<NumberSample; k++)
{
mat[k]=new QDataStream[NumberElectrode+1];
}
QObject::connect(Open, SIGNAL(triggered()), this, SLOT(message())); // When you click on open, you call the function "message"
}
Ici j'initialise ma fenetre
void MyWindow :: message()
{
File= QFileDialog :: getOpenFileName(0, tr(" Select bin file"), "", tr("*.bin")); //You can select a *bin file
if (!(File.isNull())) //If the file exists
{
int answer = QMessageBox::question(this, "File", "Do you wish to select : \n" + File, QMessageBox::Yes|QMessageBox::No); //Ask confirmation
if ((answer==QMessageBox::Yes)) //If it's confirmed
{
WindowMap* W=new WindowMap(); //Create a new window with all options for ploting
W->show(); //Show the window
Read(File);
}
else //If it's not confirmed
QMessageBox::information (this,"Problem", "Select a file"); //Come back
}
else //If there is no file
QMessageBox::warning (this,"Problem", "You don't select a file"); //Warning message
}
Ici la fonction Read(File) va permettre de donner des valeurs à chaque éléments protected.
int MyWindow::GetNbElec()
{
return NumberElectrode;
}
Mon accesseur à NumberElectrode
ColorMap :: ColorMap():QWidget()
{
MyWindow W;
int nb=W.GetNbElec();
setFixedSize(900,300);
}
Et là je souhaite accéder à NumberElectrode sauf qu'il ne retient que la valeur à l'initialisation c'est à dire 0.
class MyWindow : public QMainWindow
{
Q_OBJECT // Permit to use slot
protected :
QDialog *Fen;
QTextEdit *S;
QVBoxLayout *B;
QString File;
int NumberElectrode;
int NumberSample;
float MaxActivity;
float MinActivity;
int XStep;
int YStep;
int ZStep;
QString **Coord;
QDataStream **mat;
protected slots :
void message();
public :
MyWindow ();
void Read (QString);
int NumberOfElectrode(QString, QTextStream&);
int NumberOfSample(QString, QTextStream&);
float SearchMin (QString, QTextStream&);
float SearchMax (QString, QTextStream&);
int SearchXStep (QString, QTextStream&);
int SearchYStep (QString, QTextStream&);
int SearchZStep (QString, QTextStream&);
void ReadCoord(QString, QTextStream&);
void ReadBin(QDataStream&);
int GetNbElec();
QString getFile();
};
class ColorMap : public QWidget
{
protected :
public :
ColorMap();
};
Je souhaite récupérer les protected de la classe MyWindow dans ColorMap.
J'ai fait cà :
MyWindow :: MyWindow() : QMainWindow() //Creation of the main window, MyWindow herits of the class QMainWindow
{
QMenu *menuFichier = menuBar()->addMenu("&Fichier"); //Add a menu bar
QAction *Open = new QAction("Open", this); //Add a action
menuFichier->addAction(Open); //Join the action to the bar
setFixedSize (600,300); // Dimension of the window
NumberElectrode=NumberSample=MaxActivity=MinActivity=YStep=XStep=ZStep=0;
/*Creation of th matrice which will contain coordinates and ID*/
Coord=new QString*[NumberElectrode];
for(int i=0; i<NumberElectrode; i++)
{
Coord[i]=new QString[4];
}
/*Creation of the matrice which will contain the bin data*/
mat=new QDataStream *[NumberSample];
for (int k=0; k<NumberSample; k++)
{
mat[k]=new QDataStream[NumberElectrode+1];
}
QObject::connect(Open, SIGNAL(triggered()), this, SLOT(message())); // When you click on open, you call the function "message"
}
Ici j'initialise ma fenetre
void MyWindow :: message()
{
File= QFileDialog :: getOpenFileName(0, tr(" Select bin file"), "", tr("*.bin")); //You can select a *bin file
if (!(File.isNull())) //If the file exists
{
int answer = QMessageBox::question(this, "File", "Do you wish to select : \n" + File, QMessageBox::Yes|QMessageBox::No); //Ask confirmation
if ((answer==QMessageBox::Yes)) //If it's confirmed
{
WindowMap* W=new WindowMap(); //Create a new window with all options for ploting
W->show(); //Show the window
Read(File);
}
else //If it's not confirmed
QMessageBox::information (this,"Problem", "Select a file"); //Come back
}
else //If there is no file
QMessageBox::warning (this,"Problem", "You don't select a file"); //Warning message
}
Ici la fonction Read(File) va permettre de donner des valeurs à chaque éléments protected.
int MyWindow::GetNbElec()
{
return NumberElectrode;
}
Mon accesseur à NumberElectrode
ColorMap :: ColorMap():QWidget()
{
MyWindow W;
int nb=W.GetNbElec();
setFixedSize(900,300);
}
Et là je souhaite accéder à NumberElectrode sauf qu'il ne retient que la valeur à l'initialisation c'est à dire 0.
Donc c'est pas un problème au niveau de l'accesseur que t'a, c'est un problème de valeur qu'il prend après...
Salut.
Que c'est moche tout ça !
Nul par dans ton code tu ne modifie NumberElectrode, donc c'est normale qu'il vaille 0.
Ton constructeur est étrange, tu ne construit que des matrices vide car NumberElectrode vaut 0.
Pour finir, j'ai l'impression que tu confonds classe et objet. ça n'a pas réellement de sens de dire que tu veux transmettre des données d'une classe à une autre (sauf membre statique, mais c'est particulier) Tu peux transmettre des données d'un objet à un autre, et cette transmission est définit dans les classes. Concrètement, ça se ttraduit par la modification de ta méthode ColorMap ainsi :
Que c'est moche tout ça !
Nul par dans ton code tu ne modifie NumberElectrode, donc c'est normale qu'il vaille 0.
Ton constructeur est étrange, tu ne construit que des matrices vide car NumberElectrode vaut 0.
Pour finir, j'ai l'impression que tu confonds classe et objet. ça n'a pas réellement de sens de dire que tu veux transmettre des données d'une classe à une autre (sauf membre statique, mais c'est particulier) Tu peux transmettre des données d'un objet à un autre, et cette transmission est définit dans les classes. Concrètement, ça se ttraduit par la modification de ta méthode ColorMap ainsi :
ColorMap :: ColorMap( MyWindow *W;):QWidget() { int nb=W->GetNbElec(); setFixedSize(900,300); }
NumberElectrode est modifié dans la fonction Read et je voudrais récupérer la valeur aprés cette modif'.
ta variable est modifiée dans un objet, il faut donc appeler l'accesseur de cet objet. Dans la fonction ColorMap que tu donnes, tu appels l'accesseur d'un autre objet (W), qui ne peut du coup pas te renvoyer la bonne valeur. C'est pour ça que je te dit de modifier ta fonction.
Sinon, si tu veux récupérer cette valeur juste après la modification, il faut utiliser les systèmes de signaux de QT.
ta variable est modifiée dans un objet, il faut donc appeler l'accesseur de cet objet. Dans la fonction ColorMap que tu donnes, tu appels l'accesseur d'un autre objet (W), qui ne peut du coup pas te renvoyer la bonne valeur. C'est pour ça que je te dit de modifier ta fonction.
Sinon, si tu veux récupérer cette valeur juste après la modification, il faut utiliser les systèmes de signaux de QT.