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

Create a matrix from a .csv file

Scheduled Pinned Locked Moved Solved General and Desktop
140 Posts 2 Posters 51.2k 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.
  • 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

                        139/140

                        31 May 2020, 12:18

                        • Login

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