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.6k 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: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

                      140/140

                      31 May 2020, 12:22

                      • Login

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