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. Reimplementing QFileSystemModel Checkboxes using QMap inconsistent results

Reimplementing QFileSystemModel Checkboxes using QMap inconsistent results

Scheduled Pinned Locked Moved Solved General and Desktop
qfilesystemmodeqtreeviewqabstractitemmoqsortfilterprox
15 Posts 3 Posters 4.3k 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

    @moffa13

    different checkboxes get checked like random even if there's nothing random

    QVariant QCheckableFileSystemModel::data(const QModelIndex &index, int role) const{
    ...
    return checked;
    

    I am not a C++er, so this is either very right or very wrong! Are you supposed to return an int for a QVariant? Because if not this could produce "random" state value for your checkboxes....

    [EDIT: Looks like my suggestion was very wrong, sigh :( ]

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #3

    @JonB
    Very good question, but i think it will return a QVariant constructed from the
    int checked variable. Else compiler should be very unhappy if no automatic
    conversion can happen.

    1 Reply Last reply
    1
    • moffa13M Offline
      moffa13M Offline
      moffa13
      wrote on last edited by moffa13
      #4

      I am supposed to return a Qt::CheckState elem from enum which is int.

      Yes the compiler constructs a QVariant from the int value.

      So, any idea about what's going wrong here ?

      1 Reply Last reply
      0
      • moffa13M Offline
        moffa13M Offline
        moffa13
        wrote on last edited by
        #5

        Any help please

        mrjjM 1 Reply Last reply
        0
        • moffa13M moffa13

          Any help please

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #6

          @moffa13
          Add some qDebug() statement to see what index are sent and what it set pr index.
          I think its one of those cases where debugger and tools are more useful than guessing looking at code.

          1 Reply Last reply
          1
          • moffa13M Offline
            moffa13M Offline
            moffa13
            wrote on last edited by
            #7

            @mrjj said in Reimplementing QFileSystemModel Checkboxes using QMap inconsistent results:

            @moffa13
            Add some qDebug() statement to see what index are sent and what it set pr index.
            I think its one of those cases where debugger and tools are more useful than guessing looking at code.

            If it was that simple I wouldn't have asked.

            qDebug is showing me correct paths before calling setData. The problem is that for whatever reason, some checkboxes won't get checked. I almost always get a different result whenever I run this code.

            qDebug in setData tells me that the function receives Qt::Checked but it's not the case.

            mrjjM 1 Reply Last reply
            0
            • moffa13M moffa13

              @mrjj said in Reimplementing QFileSystemModel Checkboxes using QMap inconsistent results:

              @moffa13
              Add some qDebug() statement to see what index are sent and what it set pr index.
              I think its one of those cases where debugger and tools are more useful than guessing looking at code.

              If it was that simple I wouldn't have asked.

              qDebug is showing me correct paths before calling setData. The problem is that for whatever reason, some checkboxes won't get checked. I almost always get a different result whenever I run this code.

              qDebug in setData tells me that the function receives Qt::Checked but it's not the case.

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #8

              @moffa13
              Hi
              Hmm, i would suspect the QSet<QPersistentModelIndex>
              could contain incorrect indexes.
              Im wondering if QFileSystemModel might invalidate QPersistentModelIndexes i have seen with QSqlTableModel.

              moffa13M 1 Reply Last reply
              0
              • mrjjM mrjj

                @moffa13
                Hi
                Hmm, i would suspect the QSet<QPersistentModelIndex>
                could contain incorrect indexes.
                Im wondering if QFileSystemModel might invalidate QPersistentModelIndexes i have seen with QSqlTableModel.

                moffa13M Offline
                moffa13M Offline
                moffa13
                wrote on last edited by
                #9

                @mrjj It only has this behavior when I use QMap if I do this with QSet everything works fine. That's what I don't get

                mrjjM 1 Reply Last reply
                0
                • moffa13M moffa13

                  @mrjj It only has this behavior when I use QMap if I do this with QSet everything works fine. That's what I don't get

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #10

                  @moffa13
                  Hmm. yes that is odd.
                  One difference with Set/QMap is if u ask QMap for non existing value
                  a default-constructed value is returned but you seem to check with contains so
                  should not happen?

                  1 Reply Last reply
                  0
                  • moffa13M Offline
                    moffa13M Offline
                    moffa13
                    wrote on last edited by
                    #11

                    @mrjj

                    Yeah, exactly, for me it should work.

                    However I noticed something which may be useful. I added a QEventLoop when doing setData to look for the dataChanged signal but when I do this and I use qDebug to show the files returned by model::index, I get something like this :

                    Normal dir is
                    a.txt
                    b.txt
                    c.txt

                    filePath in the loop returns this :

                    a.txt
                    b.txt
                    b.txt

                    And c.txt does not get checked which is also odd.

                    mrjjM 1 Reply Last reply
                    0
                    • moffa13M moffa13

                      @mrjj

                      Yeah, exactly, for me it should work.

                      However I noticed something which may be useful. I added a QEventLoop when doing setData to look for the dataChanged signal but when I do this and I use qDebug to show the files returned by model::index, I get something like this :

                      Normal dir is
                      a.txt
                      b.txt
                      c.txt

                      filePath in the loop returns this :

                      a.txt
                      b.txt
                      b.txt

                      And c.txt does not get checked which is also odd.

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #12

                      @moffa13
                      Hmm. you know how b.txt is included twice ?

                      moffa13M 1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @moffa13
                        Hmm. you know how b.txt is included twice ?

                        moffa13M Offline
                        moffa13M Offline
                        moffa13
                        wrote on last edited by
                        #13

                        @mrjj this is absolutely not normal. It' a for loop iterating from 0 to rowCount(parent). Then it uses model->index(i, 0, parent). So this is not possible to output twice the same file.

                        mrjjM 1 Reply Last reply
                        0
                        • moffa13M moffa13

                          @mrjj this is absolutely not normal. It' a for loop iterating from 0 to rowCount(parent). Then it uses model->index(i, 0, parent). So this is not possible to output twice the same file.

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #14

                          @moffa13
                          Could you try to do the same for loop from say a button and use
                          no localEvent loop or anything like that and see if its
                          reproducible in other context ?

                          1 Reply Last reply
                          0
                          • moffa13M Offline
                            moffa13M Offline
                            moffa13
                            wrote on last edited by
                            #15

                            Ok I found what was causing this awful bug.

                            When I check if the map contains the index, I actually check the raw index not the QPersistantModelIndex so this is not the same object and I think qmap does not check equality using == operator .

                            So I have to iterate over the map and check using QPersistantModelIndex "==" operators which can compare from a QModelIndex.

                            1 Reply Last reply
                            1

                            • Login

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