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.
  • JonBJ JonB

    @Please_Help_me_D

    Need help to create simple model for QTreeModelView

    Did you look at the Simple Tree Model Example?

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

    @JonB thank you for reply
    Yes I saw this. It is opened in my editor but I still don't understand why I cannot run mine
    @mrjj yes, I add item in fetchRootDirectory

    mrjjM 1 Reply Last reply
    0
    • Please_Help_me_DP Please_Help_me_D

      @JonB thank you for reply
      Yes I saw this. It is opened in my editor but I still don't understand why I cannot run mine
      @mrjj yes, I add item in fetchRootDirectory

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

      @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 1 Reply Last reply
      1
      • 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

                                          • Login

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