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. Need help to create simple model for QTreeModelView
Forum Updated to NodeBB v4.3 + New Features

Need help to create simple model for QTreeModelView

Scheduled Pinned Locked Moved Solved General and Desktop
37 Posts 4 Posters 4.2k Views 3 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.
  • mrjjM mrjj

    @Please_Help_me_D
    But when view ask how many items you got via rowCount, you return zero.
    as in No rows and that is what you see.

    Please_Help_me_DP Offline
    Please_Help_me_DP Offline
    Please_Help_me_D
    wrote on last edited by
    #6

    @mrjj Why do I return zero?
    Are the comments below are true?

    int MyModel::rowCount(const QModelIndex &parent) const
    {
        if (!parent.isValid()) { // if this is  a root (there is no parent)
            return _items.size(); // this returns 1 and the application goes here
        }
        const MyItem* parentItem = static_cast<const MyItem*>(parent.internalPointer()); // 
    
        return parentItem->children.size(); //returns zero but the application never reach there
    }
    
    Please_Help_me_DP 1 Reply Last reply
    0
    • Please_Help_me_DP Please_Help_me_D

      @mrjj Why do I return zero?
      Are the comments below are true?

      int MyModel::rowCount(const QModelIndex &parent) const
      {
          if (!parent.isValid()) { // if this is  a root (there is no parent)
              return _items.size(); // this returns 1 and the application goes here
          }
          const MyItem* parentItem = static_cast<const MyItem*>(parent.internalPointer()); // 
      
          return parentItem->children.size(); //returns zero but the application never reach there
      }
      
      Please_Help_me_DP Offline
      Please_Help_me_DP Offline
      Please_Help_me_D
      wrote on last edited by
      #7

      @Please_Help_me_D Oh no, I'm wrong...

      mrjjM 1 Reply Last reply
      0
      • Please_Help_me_DP Please_Help_me_D

        @Please_Help_me_D Oh no, I'm wrong...

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

        @Please_Help_me_D
        well
        you return parentItem->children.size()
        and that is zero as it has no children :)

        So not sure if this is a tree or list or table model ?

        Please_Help_me_DP 1 Reply Last reply
        0
        • mrjjM mrjj

          @Please_Help_me_D
          well
          you return parentItem->children.size()
          and that is zero as it has no children :)

          So not sure if this is a tree or list or table model ?

          Please_Help_me_DP Offline
          Please_Help_me_DP Offline
          Please_Help_me_D
          wrote on last edited by
          #9

          @mrjj it should be tree model

          mrjjM 1 Reply Last reply
          0
          • Please_Help_me_DP Please_Help_me_D

            @mrjj it should be tree model

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

            @Please_Help_me_D
            Then you should add more than the first item :)
            So the root item does have children.

            Please_Help_me_DP 1 Reply Last reply
            0
            • mrjjM mrjj

              @Please_Help_me_D
              Then you should add more than the first item :)
              So the root item does have children.

              Please_Help_me_DP Offline
              Please_Help_me_DP Offline
              Please_Help_me_D
              wrote on last edited by
              #11

              @mrjj Well I add few children to item:

              void MyModel::fetchRootDirectory()
              {
                  MyItem* item = new MyItem("first_item");
                  item->children.push_back(new MyItem("first_child"));
                  item->children.push_back(new MyItem("second_child"));
                  _items.push_back(item);
              }
              

              but it still doesn't work :)

              mrjjM 1 Reply Last reply
              0
              • Please_Help_me_DP Please_Help_me_D

                @mrjj Well I add few children to item:

                void MyModel::fetchRootDirectory()
                {
                    MyItem* item = new MyItem("first_item");
                    item->children.push_back(new MyItem("first_child"));
                    item->children.push_back(new MyItem("second_child"));
                    _items.push_back(item);
                }
                

                but it still doesn't work :)

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

                @Please_Help_me_D
                so check with debugger what you return as rowCount ?

                Please_Help_me_DP 2 Replies Last reply
                0
                • mrjjM mrjj

                  @Please_Help_me_D
                  so check with debugger what you return as rowCount ?

                  Please_Help_me_DP Offline
                  Please_Help_me_DP Offline
                  Please_Help_me_D
                  wrote on last edited by Please_Help_me_D
                  #13

                  @mrjj I wrote:

                  int MyModel::rowCount(const QModelIndex &parent) const
                  {
                      if (!parent.isValid()) {
                          qDebug() << "Item size: " << _items.size();
                          return _items.size();
                      }
                      const MyItem* parentItem = static_cast<const MyItem*>(parent.internalPointer());
                      qDebug() << "Children size: "  << parentItem->children.size();
                      return parentItem->children.size();
                  }
                  

                  The output is:

                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Children size:  2
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  Children size:  2
                  Item size:  1
                  Item size:  1
                  Item size:  1
                  

                  Why the program goes to rowCount so many times? I already suspected that when I set the breakpoint and tried to contue application run to next breakpoint. Is it normal?

                  JonBJ 1 Reply Last reply
                  0
                  • Please_Help_me_DP Please_Help_me_D

                    @mrjj I wrote:

                    int MyModel::rowCount(const QModelIndex &parent) const
                    {
                        if (!parent.isValid()) {
                            qDebug() << "Item size: " << _items.size();
                            return _items.size();
                        }
                        const MyItem* parentItem = static_cast<const MyItem*>(parent.internalPointer());
                        qDebug() << "Children size: "  << parentItem->children.size();
                        return parentItem->children.size();
                    }
                    

                    The output is:

                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Children size:  2
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    Children size:  2
                    Item size:  1
                    Item size:  1
                    Item size:  1
                    

                    Why the program goes to rowCount so many times? I already suspected that when I set the breakpoint and tried to contue application run to next breakpoint. Is it normal?

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

                    @Please_Help_me_D said in Need help to create simple model for QTreeModelView:

                    Why it gives me such many outputs?

                    Because your rowCount() gets called by Qt (e.g. the QTreeView) more times than you think it does :)

                    Please_Help_me_DP 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Please_Help_me_D said in Need help to create simple model for QTreeModelView:

                      Why it gives me such many outputs?

                      Because your rowCount() gets called by Qt (e.g. the QTreeView) more times than you think it does :)

                      Please_Help_me_DP Offline
                      Please_Help_me_DP Offline
                      Please_Help_me_D
                      wrote on last edited by Please_Help_me_D
                      #15

                      @JonB and is it normal? or my code looks so scarry that Qt don't know what to do whith it :)

                      JonBJ 1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @Please_Help_me_D
                        so check with debugger what you return as rowCount ?

                        Please_Help_me_DP Offline
                        Please_Help_me_DP Offline
                        Please_Help_me_D
                        wrote on last edited by
                        #16

                        @mrjj maybe I should manually insert rows somehow?

                        1 Reply Last reply
                        0
                        • mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #17

                          Hi
                          Im not sure what is wrong as could also be the index but you can take a look at
                          https://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
                          which seems very similar to your code.

                          Please_Help_me_DP 1 Reply Last reply
                          0
                          • mrjjM mrjj

                            Hi
                            Im not sure what is wrong as could also be the index but you can take a look at
                            https://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
                            which seems very similar to your code.

                            Please_Help_me_DP Offline
                            Please_Help_me_DP Offline
                            Please_Help_me_D
                            wrote on last edited by
                            #18

                            @mrjj ok
                            How do you think, is it possible that the problem is how I declare variables (pointers/references and const)?. Sometimes they differ from examples but I think it should be fine

                            mrjjM 1 Reply Last reply
                            0
                            • Please_Help_me_DP Please_Help_me_D

                              @mrjj ok
                              How do you think, is it possible that the problem is how I declare variables (pointers/references and const)?. Sometimes they differ from examples but I think it should be fine

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

                              @Please_Help_me_D
                              well i think its fine since app compiles etc.
                              Its more that if you use internalPointer as in the example so it does point to what you expect.

                              Please_Help_me_DP 1 Reply Last reply
                              0
                              • Please_Help_me_DP Please_Help_me_D

                                @JonB and is it normal? or my code looks so scarry that Qt don't know what to do whith it :)

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

                                @Please_Help_me_D said in Need help to create simple model for QTreeModelView:

                                @JonB and is it normal? or my code looks so scarry that Qt don't know what to do whith it :)

                                No, it's normal that infrastructure will call your rowCount() a lot :)

                                1 Reply Last reply
                                0
                                • mrjjM mrjj

                                  @Please_Help_me_D
                                  well i think its fine since app compiles etc.
                                  Its more that if you use internalPointer as in the example so it does point to what you expect.

                                  Please_Help_me_DP Offline
                                  Please_Help_me_DP Offline
                                  Please_Help_me_D
                                  wrote on last edited by
                                  #21

                                  @mrjj @JonB well guess what? Yes I've found the snippet of code that made me feel useless for whole day :D
                                  Previously I had the MyModel::data() method:

                                  QVariant MyModel::data(const QModelIndex &index, int role) const
                                  {
                                      if (!index.isValid()) {
                                          return QVariant();
                                      }
                                      
                                      const MyItem* item = static_cast<MyItem*>(index.internalPointer());
                                      return item->title;
                                  }
                                  

                                  But when I change it to:

                                  QVariant MyModel::data(const QModelIndex &index, int role) const
                                  {
                                      if (!index.isValid()) {
                                          return QVariant();
                                      }
                                  
                                      if (role != Qt::DisplayRole && role != Qt::EditRole)
                                          return QVariant();
                                  
                                      const MyItem* item = static_cast<MyItem*>(index.internalPointer());
                                      return item->title;
                                  }
                                  

                                  everything works :)
                                  Now I'm trying to understand what the role is
                                  Thank you for help!

                                  mrjjM JonBJ 2 Replies Last reply
                                  0
                                  • Please_Help_me_DP Please_Help_me_D

                                    @mrjj @JonB well guess what? Yes I've found the snippet of code that made me feel useless for whole day :D
                                    Previously I had the MyModel::data() method:

                                    QVariant MyModel::data(const QModelIndex &index, int role) const
                                    {
                                        if (!index.isValid()) {
                                            return QVariant();
                                        }
                                        
                                        const MyItem* item = static_cast<MyItem*>(index.internalPointer());
                                        return item->title;
                                    }
                                    

                                    But when I change it to:

                                    QVariant MyModel::data(const QModelIndex &index, int role) const
                                    {
                                        if (!index.isValid()) {
                                            return QVariant();
                                        }
                                    
                                        if (role != Qt::DisplayRole && role != Qt::EditRole)
                                            return QVariant();
                                    
                                        const MyItem* item = static_cast<MyItem*>(index.internalPointer());
                                        return item->title;
                                    }
                                    

                                    everything works :)
                                    Now I'm trying to understand what the role is
                                    Thank you for help!

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

                                    @Please_Help_me_D said in Need help to create simple model for QTreeModelView:

                                    that made me feel useless for whole day

                                    Ehh, should it not make you feel happy you found it ?

                                    So good spotted.

                                    The roles are explained here
                                    https://doc.qt.io/qt-5/qt.html#ItemDataRole-enum

                                    Please_Help_me_DP 1 Reply Last reply
                                    0
                                    • mrjjM mrjj

                                      @Please_Help_me_D said in Need help to create simple model for QTreeModelView:

                                      that made me feel useless for whole day

                                      Ehh, should it not make you feel happy you found it ?

                                      So good spotted.

                                      The roles are explained here
                                      https://doc.qt.io/qt-5/qt.html#ItemDataRole-enum

                                      Please_Help_me_DP Offline
                                      Please_Help_me_DP Offline
                                      Please_Help_me_D
                                      wrote on last edited by
                                      #23

                                      @mrjj I would be if not my birthday today :D

                                      mrjjM 1 Reply Last reply
                                      0
                                      • Please_Help_me_DP Please_Help_me_D

                                        @mrjj I would be if not my birthday today :D

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

                                        @Please_Help_me_D
                                        :)
                                        Ok fair enough but it's also a bit hardcore to fiddle with QAbstractItemModel on
                                        such a special day :)

                                        alt text

                                        Please_Help_me_DP 2 Replies Last reply
                                        0
                                        • mrjjM mrjj

                                          @Please_Help_me_D
                                          :)
                                          Ok fair enough but it's also a bit hardcore to fiddle with QAbstractItemModel on
                                          such a special day :)

                                          alt text

                                          Please_Help_me_DP Offline
                                          Please_Help_me_DP Offline
                                          Please_Help_me_D
                                          wrote on last edited by
                                          #25

                                          @mrjj thank you))
                                          hardcore is my lastname :)

                                          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