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.3k 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
    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