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. Update QTableView after hiding columns
Forum Updated to NodeBB v4.3 + New Features

Update QTableView after hiding columns

Scheduled Pinned Locked Moved Solved General and Desktop
12 Posts 3 Posters 16.4k Views 1 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.
  • G Offline
    G Offline
    giesbert
    wrote on last edited by
    #2

    First of all,m you hide columns, not rows :-)

    I think, the problem is that you explicitly hide columns, and the perhaps switch the model. You should remove the setColumnHidden and rehide all new hidden rows.

    I think, that could help.

    Nokia Certified Qt Specialist.
    Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

    1 Reply Last reply
    0
    • G Offline
      G Offline
      goetz
      wrote on last edited by
      #3

      Why not use a proxy model (based on "QSortFilterProxyModel":http://doc.qt.nokia.com/stable/qsortfilterproxymodel.html) like in this "wiki article":http://developer.qt.nokia.com/wiki/Filter_Columns_in_a_QFileSystemModel

      And don't forget to let the model emit signals (columnAdde/Remove etc.) afterwards to have the view catch up the changes.

      http://www.catb.org/~esr/faqs/smart-questions.html

      1 Reply Last reply
      0
      • G Offline
        G Offline
        giesbert
        wrote on last edited by
        #4

        you needn't emit signals if you just filter out rows. There are callback for hiding rows/columns in QSortFilterProxyModel: "filterAcceptsColumn":http://doc.qt.nokia.com/latest/qsortfilterproxymodel.html#filterAcceptsColumn and "filterAcceptsRow":http://doc.qt.nokia.com/latest/qsortfilterproxymodel.html#filterAcceptsRow

        Also see the "example in the description of QSortFilterProxyModel":http://doc.qt.nokia.com/latest/qsortfilterproxymodel.html#filtering

        Nokia Certified Qt Specialist.
        Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

        1 Reply Last reply
        0
        • G Offline
          G Offline
          goetz
          wrote on last edited by
          #5

          Yep. But if the filter rules change after the view has finished displaying items, you must inform the view of the change. Fortunately the Trolls have provided us with slot "invalidateFilter() ":http://doc.qt.nokia.com/latest/qsortfilterproxymodel.html#invalidateFilter for this :-)

          http://www.catb.org/~esr/faqs/smart-questions.html

          1 Reply Last reply
          0
          • J Offline
            J Offline
            js_dev
            wrote on last edited by
            #6

            Thanks so far.

            I will have a look at the proxy model next week and will also try to unhide the hidden columns before I hide them again.

            Don't be afraid of perfection, you will never reach it.
            (Salvator Dali)

            1 Reply Last reply
            0
            • J Offline
              J Offline
              js_dev
              wrote on last edited by VRonin
              #7

              Ok, if I do this

              // unhide all hidden columns
              int rows = myDataTableModel()->rowCount();
              for(int i=0; i<rows; i++)
              {
               ui.mySimDataTableView->setColumnHidden(i, false);
              }
              

              before

              ui.mySimDataTableView->setModel(myDataTableModel);

              everythink is fine.

              Thank you :-)

              Don't be afraid of perfection, you will never reach it.
              (Salvator Dali)

              1 Reply Last reply
              0
              • G Offline
                G Offline
                giesbert
                wrote on last edited by
                #8

                [quote author="js_dev" date="1296216104"]Thanks so far.

                I will have a look at the proxy model next week and will also try to unhide the hidden columns before I hide them again.[/quote]

                If you use the proxy model approach, the setColumnHidden of the view is not needed anymore.

                Nokia Certified Qt Specialist.
                Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  giesbert
                  wrote on last edited by VRonin
                  #9

                  Ok, if I do this

                  // unhide all hidden columns
                  int rows = myDataTableModel()->rowCount();
                  for(int i=0; i<rows; i++)
                  {
                  ui.mySimDataTableView->setColumnHidden(i, false);
                  }
                  

                  before

                  ui.mySimDataTableView->setModel(myDataTableModel);

                  everythink is fine.

                  Thank you :-)[/quote]

                  What is a bit strange:

                  you iterate over rowCount and call setColumnHidden
                  This does not fit!

                  Nokia Certified Qt Specialist.
                  Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    js_dev
                    wrote on last edited by VRonin
                    #10

                    Oh man - I mixed up rows and columns again :-(
                    Sorry for the confuision.

                    It must look like this:

                    // unhide all hidden columns
                    int cols = myDataTableModel()->columnCount();
                    for(int i=0; i<cols; i++)
                    {
                     ui.mySimDataTableView->setColumnHidden(i, false);
                    }
                    
                    ui.mySimDataTableView->setModel(myDataTableModel());
                    

                    Don't be afraid of perfection, you will never reach it.
                    (Salvator Dali)

                    1 Reply Last reply
                    0
                    • J Offline
                      J Offline
                      js_dev
                      wrote on last edited by VRonin
                      #11

                      I found another (maybe easier) way to unhide all the previously hidden columns.

                      If I resize the columns to content after hiding the columns I can get rid of the loop I posted above and the table view shows all the columns I want to see.

                      Do it like this:

                      if (stuff.exec(s))
                      {
                       while(stuff.next())
                       {
                        hide = stuff.value(1).toInt() == 0;
                        index = myDataTableModel();->fieldIndex(stuff.value(0).toString());
                        if(index >= 0)
                        {
                         ui.mySimDataTableView->setColumnHidden(index, hide);
                        }
                       }
                      }
                      // This will resize the columns to content and also unhide all previously hidden columns
                      ui.mySimDataTableView->resizeColumnsToContents();
                      

                      Don't be afraid of perfection, you will never reach it.
                      (Salvator Dali)

                      1 Reply Last reply
                      0
                      • G Offline
                        G Offline
                        giesbert
                        wrote on last edited by
                        #12

                        As this is not a described behavior, you should take care that it might change in future...

                        Nokia Certified Qt Specialist.
                        Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                        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