Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Create a matrix from a .csv file
Forum Updated to NodeBB v4.3 + New Features

Create a matrix from a .csv file

Scheduled Pinned Locked Moved Solved General and Desktop
140 Posts 2 Posters 52.7k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AliM93
    wrote on 31 May 2020, 02:17 last edited by
    #129

    i don't want to disturb you anymore tonight, if you want and if you have time we can continue tomorrow

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mrjj
      Lifetime Qt Champion
      wrote on 31 May 2020, 02:21 last edited by
      #130

      Yes its possible. we can paint it any way we like. teasers included.

      Well im getting very tired as 4.20 in the morning is late for me even i do love programming at night.

      Tomorrow we add the last part. It's not that much. Promise.
      You did good. First custom widget is always a bit tuff.

      alt text

      alt text

      1 Reply Last reply
      0
      • A Offline
        A Offline
        AliM93
        wrote on 31 May 2020, 02:23 last edited by
        #131

        thank you so much! you help me a lot also in understand the ideas. thanks. night!

        1 Reply Last reply
        0
        • M Offline
          M Offline
          mrjj
          Lifetime Qt Champion
          wrote on 31 May 2020, 11:20 last edited by mrjj
          #132

          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 selected

          class 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.

          alt text

          project
          https://www.dropbox.com/s/z4nllgag1tjy4j3/GridWidgetApp.zip?dl=0

          Things 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.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            AliM93
            wrote on 31 May 2020, 11:59 last edited by AliM93
            #133

            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.

            M 1 Reply Last reply 31 May 2020, 12:06
            0
            • A AliM93
              31 May 2020, 11:59

              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.

              M Offline
              M Offline
              mrjj
              Lifetime Qt Champion
              wrote on 31 May 2020, 12:06 last edited by
              #134

              @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 ?

              A 1 Reply Last reply 31 May 2020, 12:06
              0
              • M mrjj
                31 May 2020, 12:06

                @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 ?

                A Offline
                A Offline
                AliM93
                wrote on 31 May 2020, 12:06 last edited by
                #135

                @mrjj in mine

                M 1 Reply Last reply 31 May 2020, 12:08
                0
                • A AliM93
                  31 May 2020, 12:06

                  @mrjj in mine

                  M Offline
                  M Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 31 May 2020, 12:08 last edited by
                  #136

                  @AliM93

                  Ok, i would guess that you forgot something from the maxtric class to put in yours.
                  But if the grid is drawn ( you see it) and then when you click error comes ?

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    AliM93
                    wrote on 31 May 2020, 12:11 last edited by
                    #137
                    This post is deleted!
                    M 1 Reply Last reply 31 May 2020, 12:13
                    0
                    • A AliM93
                      31 May 2020, 12:11

                      This post is deleted!

                      M Offline
                      M Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on 31 May 2020, 12:13 last edited by mrjj
                      #138

                      @AliM93
                      If it compiles then all includes are fine.

                      Do you load data ?

                      Did you change LoadData function to set colors ?
                      (or use mine, just change the path to the data file)

                      I think all is just black :)
                      (default zero)

                      A 1 Reply Last reply 31 May 2020, 12:18
                      0
                      • M mrjj
                        31 May 2020, 12:13

                        @AliM93
                        If it compiles then all includes are fine.

                        Do you load data ?

                        Did you change LoadData function to set colors ?
                        (or use mine, just change the path to the data file)

                        I think all is just black :)
                        (default zero)

                        A Offline
                        A Offline
                        AliM93
                        wrote on 31 May 2020, 12:18 last edited by
                        #139

                        @mrjj Done!! now i wii implement the function to save points! i'll let you know. thanks so much

                        M 1 Reply Last reply 31 May 2020, 12:22
                        0
                        • A AliM93
                          31 May 2020, 12:18

                          @mrjj Done!! now i wii implement the function to save points! i'll let you know. thanks so much

                          M Offline
                          M Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 31 May 2020, 12:22 last edited by mrjj
                          #140

                          Hi
                          Ok super.
                          Good work. Your first custom Widget :)

                          Saving the points should be ok easy.
                          you can loop the Data array and take all where isSelected is true.

                          Ps please flag this as solved:)

                          1 Reply Last reply
                          0

                          138/140

                          31 May 2020, 12:13

                          • Login

                          • Login or register to search.
                          138 out of 140
                          • First post
                            138/140
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • Users
                          • Groups
                          • Search
                          • Get Qt Extensions
                          • Unsolved