Create a matrix from a .csv file
-
wrote on 31 May 2020, 02:01 last edited by
i run it but obviouslt i can't see anything
-
wrote on 31 May 2020, 02:02 last edited by
because we have to add the matrix in the widget, right?
-
@AliM93
yes.
You should still have the layout from before, correct ?
then in Grids constrcutorGridDialog::GridDialog(QWidget *parent) : QDialog(parent), ui(new Ui::GridDialog) { ui->setupUi(this); MatrixWidget * m = new MatrixWidget (this); ui->verticalLayout->addWidget(m); /// you name might differ for layout }
We dont need the plain widget any more. you can delete it. we use the layout
-
wrote on 31 May 2020, 02:08 last edited by
done! but i only see the grid, not the content
-
@AliM93
\o/
Good work.
I hope you learn a few Creator tricks.we didnt paint the values yet :)
just all other stuff :=)But its 4 in the morning so rest must be tomorrow as its bed time for me :)
-
@AliM93
\o/
Good work.
I hope you learn a few Creator tricks.we didnt paint the values yet :)
just all other stuff :=)But its 4 in the morning so rest must be tomorrow as its bed time for me :)
-
wrote on 31 May 2020, 02:10 last edited by
anyway, ok for tomorrow, you have been too much patient with me, thanks. and for the first time, i can say thay i better undestand how qt works! i start to appreciate it
-
@AliM93
well do you have that version of paint ?void MatrixWidget::paintEvent(QPaintEvent *event) { QPainter p(this); // draw frame. p.drawRect(0, 0, width() - 1, height() - 1); // size of area we have. w = width , h = height , we take 2 pixles for border int w = width() - 2; int h = height() - 2; // now we find out how big each box should be which area we have divided with how many on x and y bw = w / max_x; bh = h / max_y; // now we loop and drw the boxes for (int xi = 0; xi < max_x; ++xi) { for (int yi = 0; yi < max_x; ++yi) { p.drawRect( QRect( xi * bw, yi * bh, bw, bh ) ) ; p.drawText(QRect( xi * bw, yi * bh, bw, bh ), QString::number(xi + 1) + "," + QString::number(yi+1) ); // the +1 aswe dont want to use first at 0,0 } } }
-
wrote on 31 May 2020, 02:11 last edited by
yes i have
-
@AliM93
But it dont draw numbers ?
That seems very odd.But you do see grid ?
-
wrote on 31 May 2020, 02:13 last edited by
sorry! now i have, i lost a part of that version of matrix, sorry!
-
@AliM93
Ok that good news as it would be very impossible that numbers went missing :)what is remaining is the click logic and to actual draw the 1.
how shall we draw 0 ones ?
just no value in cell and cant be selected or what is the goal? -
wrote on 31 May 2020, 02:16 last edited by
my idea was to color all the 1s in green and the 0s in gray. so the user know that can select only the green cells, is it possible?
-
wrote on 31 May 2020, 02:17 last edited by
i don't want to disturb you anymore tonight, if you want and if you have time we can continue tomorrow
-
-
wrote on 31 May 2020, 02:23 last edited by
thank you so much! you help me a lot also in understand the ideas. thanks. night!
-
Hi
The last remaining steps are to
+Add box width/height as members to use when clicking and a variable to keep track of the number of selectedclass MatrixWidget : public QWidget {.... int bw =0; int bh =0; int selCount=0; // to make sure we can only select 3 ,...
+call loadData from construtor.
+Set some colors in void MatrixWidget::LoadData()
for 0 cells and 1 cells (see code)+Add selection logic to mousePress
void MatrixWidget::mousePressEvent(QMouseEvent *event) { QPoint p = event->pos(); // where we clicked int xindex = p.x() / bw; int yindex = p.y() / bh; qDebug() << xindex << " " << yindex; // get the data point ( we should check index is not outside array...) DataPoint &dp = Data[xindex + 1 ][yindex + 1]; // value zero cannot be selected if ( dp.value == 0 ) return; // selection logic. If not already selected, select it and set color. Else deselect and reset color if ( dp.isSelected == false) { // no more than 3 selected ( 0,1,2 ) if ( selCount > 2 ) return; dp.DrawColor = Qt::blue; dp.isSelected = true; selCount++; // extra selected } else { dp.DrawColor = Qt::green; dp.isSelected = false; selCount--; // less selected } update(); // tell it to redraw grid }
+Adjust draw to skip 0,0 as we don't use it but the array must start at zero.
void MatrixWidget::paintEvent(QPaintEvent *event) { QPainter p(this); // draw frame. p.drawRect(0, 0, width() - 1, height() - 1); // size of area we have. w = width , h = height , we take 2 pixles for border int w = width() - 2; int h = height() - 2; // now we find out how big each box should be which area we have divided with how many on x and y bw = w / max_x; bh = h / max_y; // now we loop and draw the boxes. we dont use the boxes from 0,0 as data starts with 1,1 for (int xi = 0; xi < max_x - 1; ++xi) { for (int yi = 0; yi < max_x - 1; ++yi) { p.setBrush(QBrush( Data[xi + 1][yi + 1].DrawColor )); // +1 as we dont want to use from 0,0 QRect cellRect( xi * bw, yi * bh, bw, bh ); p.drawRect( cellRect ); // show x,y . just for debug p.drawText( cellRect , QString::number(xi + 1) + "," + QString::number(yi +1) ); } } }
Then we have a working version.
project
https://www.dropbox.com/s/z4nllgag1tjy4j3/GridWidgetApp.zip?dl=0Things to improve/add
The limit of how many points user can select,
should be a parameter to the class so it can be set to anything and not a fixed value.The colors could also be parameters ( for not selectable, selectable and selected)
Add a function to return the selected data pointsby looping the Data list and check isSelected.
-
wrote on 31 May 2020, 11:59 last edited by AliM93
thanks! i'll do it step by step, i quite understand it, but when i run i got a black grid, and the error floating point exeption (core dumped) No more error, (i also see the coordinates in the debug), but black grid.
-
thanks! i'll do it step by step, i quite understand it, but when i run i got a black grid, and the error floating point exeption (core dumped) No more error, (i also see the coordinates in the debug), but black grid.
@AliM93 said in Create a matrix from a .csv file:
it, but when i run i got a black grid, and the error floating point exeption (core dumped)
In my project or yours ?
-
@AliM93 said in Create a matrix from a .csv file:
it, but when i run i got a black grid, and the error floating point exeption (core dumped)
In my project or yours ?
125/140