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 Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by mrjj
    #3

    Hi
    Ran your code.
    You dont have any items ?
    I dont see you add anything to the list and it also reports zero

    alt text

    Ah you do add one here

    
    void MyModel::fetchRootDirectory()
    {
        _items.push_back(new MyItem("first_item"));
    }
    

    so the rowCount code seems not correct.

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

                                          • Login

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