Solved Create a matrix from a .csv file
-
@AliM93
Thats the Insert Option part
Default its on something else.
But no worries.
Do you have them in .h with body also like
If yes, then click on the function name and go to the refactor menu again ( or press alt+enter)
and ask it to move it to .CPP
do for both functions. -
@mrjj the code that you wrote me i have to write into .h or .cpp? into the .h i suppose
we need my previous code to read the data from csv? -
@AliM93 said in Create a matrix from a .csv file:
- the code that you wrote me i have to write into .h or .cpp? into the .h i suppose
Yes the DataPoint class goes into .h as shown higher up.
we need my previous code to read the data from csv?
Yes, this has to be changed to add the values to the
DataPoint Data[max_x][max_y];
please post it. - the code that you wrote me i have to write into .h or .cpp? into the .h i suppose
-
csvModel = new QStandardItemModel(this); csvModel->setColumnCount(3); csvModel->setHorizontalHeaderLabels(QStringList() <<"x" <<y"" << "bool"); ui->tableView_1->setModel(csvModel); QFile file("/home/alice/catkin_ws/src/agree_gui/resources/Punti_tappetino.csv"); if(!file.open(QFile::ReadOnly | QFile::Text)) { qDebug()<< "FIle not exist"; } else { QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); QList<QStandardItem *>standardItemsList; for(QString item:line.split(";")) } csvModel ->insertRow(csvModel->rowCount(), standardItemsList); } file.close(); ```this is in the .cpp file, and in the .h i put
QStandardItemsModel *csvModel;
there are also some include in the cpp :
#include <QTableView>
#include <iostream>
#include <fstream>
#include <sstream>and om the .h
#include <QStandardItemModel>
-
Hi
Super
Now we add a new function to our new class.
lets call it LoadData.add these to the .cpp #include <QFile> #include <QTextStream> #include <QDebug> // this is changed version of your reader code void MatrixWidget::LoadData() { QFile file("/home/alice/catkin_ws/src/agree_gui/resources/Punti_tappetino.csv"); if (!file.open(QFile::ReadOnly | QFile::Text)) { qDebug() << "FIle not exist"; } else { QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); QStringList list = line.split(";"); int x = list.at(0).toInt(); int y = list.at(1).toInt(); bool value = list.at(2).toInt(); if ( x < max_x && y < max_y) // to make sure we dont crash Data[x][y].value = value; // here we store value else qDebug() << "x or y bigger than matrix!"; } } file.close(); }
Do you follow so far ?
I have not tried this before so not sure how easy its to follow :) -
@mrjj yes i understand all the flow! super clear, so far.
-
@AliM93
Super!
Could you open Punti_tappetino.csv in textEditor and copy it to say
https://paste.ofcode.org/
and give me url ?
Then i also have some real data to read it to check loaddata works :) -
@mrjj Done! are you seing it?
-
@AliM93
where is the url ?you have to press paste it and then copy the adress from the top of browser
like
https://paste.ofcode.org/vYJiPZBPqzaDNArjpqPYE7
(just test) -
@mrjj https://paste.ofcode.org/XLhSxBmaWcaKj2L9CapQ3s
sorry my bad
i have also to declare the function iLoadData in the .h file, right? in the private, protected or in the public slot?
-
@AliM93
ah better :)
yes also add to public section.
we might call it from outside so its public. -
@mrjj ok! but i get some trouble with the struct. invalid use of non-static data member.
-
@AliM93
can you show line where it says that ยด
Mine compiles fine. -
This post is deleted! -
@AliM93
nope its not cmakeit seems you forgot the ending of the DataPoint class ?
the }; part ?struct DataPoint { int x; int y; bool value; QColor DrawColor; // we change this from selected / not selected. bool isSelected; // we set this when we click on it. };
-
sorry.
solved. and now in public slot :
i add : void::Matrixwidget LoadData? -
@AliM93 said in Create a matrix from a .csv file:
void::Matrixwidget LoadData?
yes but mind the use of ::
its only use outside class so in .h its justvoid LoadData();
-
done! thanks, now we have to modify the paintevent in order to show the grid, right?
-
Ok, small fix.
You data has max x,y as
x: 14 y: 21
so our array is one to small as we start in 0 (zero)
so changeconst int max_x = 14;
const int max_y = 21;to
const int max_x = 15;
const int max_y = 22;as else we drop some :)
-
@mrjj ok thanks