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 Update on Monday, May 27th 2025

Create a matrix from a .csv file

Scheduled Pinned Locked Moved Solved General and Desktop
140 Posts 2 Posters 51.8k Views
  • 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 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
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on 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 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.

        mrjjM 1 Reply Last reply
        0
        • A 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.

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on 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
          0
          • mrjjM mrjj

            @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 last edited by
            #135

            @mrjj in mine

            mrjjM 1 Reply Last reply
            0
            • A AliM93

              @mrjj in mine

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on 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 last edited by
                #137
                This post is deleted!
                mrjjM 1 Reply Last reply
                0
                • A AliM93

                  This post is deleted!

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on 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
                  0
                  • mrjjM mrjj

                    @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 last edited by
                    #139

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

                    mrjjM 1 Reply Last reply
                    0
                    • A AliM93

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

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on 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

                      • Login

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