How Can i get array in another class
-
wrote on 20 Jul 2021, 03:41 last edited by
If class B is child of class A, then you can do sth like this in class B
classA *clsA= dynamic_cast <classA*> (parent()); clsA->funcToGetData();
-
@anh_ph the funcToGetData(); can be a slot wich get data from GUI elements ?
And if classA isn't child od classB . How can i call it
wrote on 20 Jul 2021, 12:56 last edited by JonB@dziko147 said in How Can i get array in another class:
And if classA isn't child od classB . How can i call it
The code you were shown attempts to cast the
parent()
toclassA
. If yourclassA
instance is not related to youclassB
instance through its parent, then use whatever you have for the desiredclassA
instance....I'm not sure but you seem not to understand the difference between a class and an instance (or object)? If that is the case I suggest you read up to understand, as this is vital in OO programming.
-
@JonB no i know the difference between instance and class .
But honestly i have no idea what parent() mean .
And if we say a classA is a child of classB we mean classA is inherited drom classB .Thank you
@dziko147 said in How Can i get array in another class:
we mean classA is inherited drom classB
No, we don't.
See https://doc.qt.io/qt-5/objecttrees.html
Parent/child is not about inheritance it is about relationships between QObject based classes. -
@anh_ph the funcToGetData(); can be a slot wich get data from GUI elements ?
And if classA isn't child od classB . How can i call it
wrote on 21 Jul 2021, 07:30 last edited by@dziko147 said in How Can i get array in another class:
@anh_ph the funcToGetData(); can be a slot wich get data from GUI elements ?
And if classA isn't child od classB . How can i call it
If you want to get data from classA, you must get an exact object of it, which works with the data. If you can't do it, then try to apply singleton to classA.
Btw, you can't get an array in another class, but you can get an array in an object of another class. -
wrote on 21 Jul 2021, 12:30 last edited by
to resume what should i do to set data from GUI element in an array then get this array in another class .
Btw I tried many solution but usually I get an empty array in the other class :)
-
to resume what should i do to set data from GUI element in an array then get this array in another class .
Btw I tried many solution but usually I get an empty array in the other class :)
@dziko147 said in How Can i get array in another class:
but usually I get an empty array in the other class
I guess that's because you have more than one instance of the class from which you get your array.
Please post your code. Passing data from one object to another is actually a trivial exercise. -
wrote on 21 Jul 2021, 13:53 last edited by dziko147
// classeA.h std::array<QString,25> Inputs; // ClassA.cpp "UploadCSV" void UploadCSV::on_parambtn_2_clicked() { int compteur=0; QString cell0; QString cell3 ; for(int i=0;i<ui->tablewidget->rowCount();i++){ QTableWidgetItem *cell7 = ui->tablewidget->item(i,7); QVariant myData7 = cell7->data(Qt::DisplayRole); if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } } }
//in classB.
UploadCSV *up;
//in classB.cpp
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
-
// classeA.h std::array<QString,25> Inputs; // ClassA.cpp "UploadCSV" void UploadCSV::on_parambtn_2_clicked() { int compteur=0; QString cell0; QString cell3 ; for(int i=0;i<ui->tablewidget->rowCount();i++){ QTableWidgetItem *cell7 = ui->tablewidget->item(i,7); QVariant myData7 = cell7->data(Qt::DisplayRole); if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } } }
//in classB.
UploadCSV *up;
//in classB.cpp
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
@dziko147 Sorry, I fail to understand the code you posted.
What type is myclasseA? And why do you access Inputs from two different objects (up and myclasseA)?
It really looks like you have two different instances of UploadCSV... -
// classeA.h std::array<QString,25> Inputs; // ClassA.cpp "UploadCSV" void UploadCSV::on_parambtn_2_clicked() { int compteur=0; QString cell0; QString cell3 ; for(int i=0;i<ui->tablewidget->rowCount();i++){ QTableWidgetItem *cell7 = ui->tablewidget->item(i,7); QVariant myData7 = cell7->data(Qt::DisplayRole); if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } } }
//in classB.
UploadCSV *up;
//in classB.cpp
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
wrote on 21 Jul 2021, 14:00 last edited by Pl45m4@dziko147 said in How Can i get array in another class:
,myclasseA.Inputs[i]
Why do you have
myClasseA
there, when the object isup
Tryup.Inputs[i]
(Corrected, thx @jsulm )
-
@dziko147 said in How Can i get array in another class:
,myclasseA.Inputs[i]
Why do you have
myClasseA
there, when the object isup
Tryup.Inputs[i]
(Corrected, thx @jsulm )
@Pl45m4 said in How Can i get array in another class:
when the object is UploadCSV
UploadCSV seems to be the class, not object
-
// classeA.h std::array<QString,25> Inputs; // ClassA.cpp "UploadCSV" void UploadCSV::on_parambtn_2_clicked() { int compteur=0; QString cell0; QString cell3 ; for(int i=0;i<ui->tablewidget->rowCount();i++){ QTableWidgetItem *cell7 = ui->tablewidget->item(i,7); QVariant myData7 = cell7->data(Qt::DisplayRole); if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } } }
//in classB.
UploadCSV *up;
//in classB.cpp
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
wrote on 21 Jul 2021, 14:05 last edited by@dziko147 said in How Can i get array in another class:
up=new UploadCSV();
for(size_t i=0;i<up.Inputs->size();i++){
qqDebug() << "this is data",up.Inputs[i]Sorry, who calls the on_parambtn_2_clicked() function?
-
@jsulm sorry I edited the code .
I gave the expamle of classA and ClassB to be clearer .
ClassA (UploadCSV ) is a Qwidget : Qdialog
ClassB (Backend) is QObject .
@dziko147 Is this your real code:
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
?
Because Items is filled when UploadCSV::on_parambtn_2_clicked() is called (at least according to code you posted). But you're printing Inputs just after creating UploadCSV instance (up)! So why should there be anything in Inputs? -
@CP71 it's called in UploadCSV class (classA) .
and inside this function I set data in Inputs[] .
@dziko147 said in How Can i get array in another class:
it's called in UploadCSV class (classA) .
Where exactly?! And what is classA?! This all is really confusing!
up != classA -
@dziko147 Is this your real code:
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
?
Because Items is filled when UploadCSV::on_parambtn_2_clicked() is called (at least according to code you posted). But you're printing Inputs just after creating UploadCSV instance (up)! So why should there be anything in Inputs? -
@dziko147 Yes, I can: use one instance of the class instead of two...
26/46