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.7k 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 31 May 2020, 02:11 last edited by
    #124

    yes i have

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

      yes i have

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

      @AliM93
      But it dont draw numbers ?
      That seems very odd.

      But you do see grid ?

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

        sorry! now i have, i lost a part of that version of matrix, sorry!

        M 1 Reply Last reply 31 May 2020, 02:14
        0
        • A AliM93
          31 May 2020, 02:13

          sorry! now i have, i lost a part of that version of matrix, sorry!

          M Offline
          M Offline
          mrjj
          Lifetime Qt Champion
          wrote on 31 May 2020, 02:14 last edited by
          #127

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

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

            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?

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

                                    133/140

                                    31 May 2020, 11:59

                                    • Login

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