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. How to delete a row of a QGridLayout
Qt 6.11 is out! See what's new in the release blog

How to delete a row of a QGridLayout

Scheduled Pinned Locked Moved Unsolved General and Desktop
20 Posts 5 Posters 9.9k 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.
  • JonBJ JonB

    @maxime0601
    I already said/suggested

    int row = this->rowCount();
    ...
    this->itemAtPosition(row,i)->widget()->hide();
    

    Don't rows count from 0 to this->rowCount() - 1? So your row exceeds the number of rows, hence crashes? Test what this->itemAtPosition(row, 0) returns, or crashes?

    Then when you have this right, I don't think you should directly delete an item (which is still owned by the grid layout), shouldn't you do some kind of:

    delete this->takeAt(?)
    
    M Offline
    M Offline
    Maxime0601
    wrote on last edited by
    #11

    @jonb It continues to crash

    @Pl45m4 I also tried with

    this->removeWidget(itemAtPosition(row,0)->widget()->hide();
    

    and it crashes too.

    jsulmJ JonBJ 2 Replies Last reply
    0
    • M Maxime0601

      @jonb It continues to crash

      @Pl45m4 I also tried with

      this->removeWidget(itemAtPosition(row,0)->widget()->hide();
      

      and it crashes too.

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #12

      @maxime0601 said in How to delete a row of a QGridLayout:

      It continues to crash

      then please use the debugger to see what exactly happens and where...

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      M 1 Reply Last reply
      0
      • M Maxime0601

        @jonb It continues to crash

        @Pl45m4 I also tried with

        this->removeWidget(itemAtPosition(row,0)->widget()->hide();
        

        and it crashes too.

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #13

        @maxime0601

        @jonb It continues to crash

        @Pl45m4 I also tried with

        this->removeWidget(itemAtPosition(row,0)->widget()->hide();

        and it crashes too.

        Last time of saying: what does itemAtPosition(row,0) return/do, given your value of row?? How difficult is it to test that?

        1 Reply Last reply
        0
        • jsulmJ jsulm

          @maxime0601 said in How to delete a row of a QGridLayout:

          It continues to crash

          then please use the debugger to see what exactly happens and where...

          M Offline
          M Offline
          Maxime0601
          wrote on last edited by
          #14

          @jsulm I have a signal of segmentation fault. It confirms that I try to use an outside element of my grid

          jsulmJ 1 Reply Last reply
          0
          • M Maxime0601

            @jsulm I have a signal of segmentation fault. It confirms that I try to use an outside element of my grid

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by jsulm
            #15

            @maxime0601 said in How to delete a row of a QGridLayout:

            I try to use an outside element of my grid

            Well, then fix that. And I know that it is crashing and my suggestion to use debugger is still valid: you will see where exactly it is crashing and what the values of variables at that time.
            Did you read what @JonB wrote?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • M Offline
              M Offline
              Maxime0601
              wrote on last edited by Maxime0601
              #16

              @jonb I'm sorry if I don't understand what you mean but when I tried itemAtPosition(row,0) it crashes.
              @jsulm the problem is at column 4 and row 7 and it is the position of one of the element that I want to delete.

              Oh I tried with row - 1 and it seems works

              JonBJ 1 Reply Last reply
              0
              • M Maxime0601

                @jonb I'm sorry if I don't understand what you mean but when I tried itemAtPosition(row,0) it crashes.
                @jsulm the problem is at column 4 and row 7 and it is the position of one of the element that I want to delete.

                Oh I tried with row - 1 and it seems works

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by JonB
                #17

                @maxime0601

                @jonb I'm sorry if I don't understand what you mean but when I tried itemAtPosition(row,0) it crashes.

                Which is why I said your program crashes all the time! You are not understanding that rows are numbered starting from 0 and going to rowCount() - 1, not to rowCount(). That's how most arrays etc. are numbered in C/C++. I don't know how to explain any better, you really need to understand this fundamental, rather than banging stuff in without understanding:

                Oh I tried with row - 1 and it seems works

                You really need to understand why that it is, rather than "seems to work".

                1 Reply Last reply
                2
                • M Offline
                  M Offline
                  Maxime0601
                  wrote on last edited by
                  #18
                  int row = this->rowCount();
                  int col = this->columnCount();
                  if (row > 6)
                  {
                     for (int i(0); i < col ; ++i)
                     {
                           this->itemAtPosition(row - 1,i)->widget()->hide();
                           delete this->takeAt(row - 1);
                     }
                  }
                  

                  So, when I used this code, the last row disappeared as I want but the disposition of the others elements in the grid changes.

                  @JonB yes I knew this for vector but I totally forgot it. I'm sorry for that.

                  JonBJ 1 Reply Last reply
                  0
                  • M Maxime0601
                    int row = this->rowCount();
                    int col = this->columnCount();
                    if (row > 6)
                    {
                       for (int i(0); i < col ; ++i)
                       {
                             this->itemAtPosition(row - 1,i)->widget()->hide();
                             delete this->takeAt(row - 1);
                       }
                    }
                    

                    So, when I used this code, the last row disappeared as I want but the disposition of the others elements in the grid changes.

                    @JonB yes I knew this for vector but I totally forgot it. I'm sorry for that.

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #19

                    @maxime0601
                    I'm sorry but it's more complex than you are expecting. You really need to read https://stackoverflow.com/questions/5395266/removing-widgets-from-qgridlayout. I know it looks a lot more involved than what you are trying, but there you are....

                    M 1 Reply Last reply
                    1
                    • JonBJ JonB

                      @maxime0601
                      I'm sorry but it's more complex than you are expecting. You really need to read https://stackoverflow.com/questions/5395266/removing-widgets-from-qgridlayout. I know it looks a lot more involved than what you are trying, but there you are....

                      M Offline
                      M Offline
                      Maxime0601
                      wrote on last edited by
                      #20

                      @jonb Thanks a lot, I've searched but I don't found similar topic. I think that I can succeed with this.
                      Thanks a lot everyone for your help

                      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