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. QStandardItem subclassing?

QStandardItem subclassing?

Scheduled Pinned Locked Moved General and Desktop
24 Posts 6 Posters 11.9k Views
  • 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.
  • A Offline
    A Offline
    andre
    wrote on last edited by
    #9

    Did you try just adding your own item instance instead of the standard one? What happened?

    1 Reply Last reply
    0
    • B Offline
      B Offline
      Beka
      wrote on last edited by
      #10

      I have subbclassed QStandardItemModel already, so I just try to set in constructor something like this: this->setItemPrototype(new myItem());

      1 Reply Last reply
      0
      • A Offline
        A Offline
        andre
        wrote on last edited by
        #11

        You normally should not need to subclass QStandardItemModel itself, you should be able to use it without subclassing.

        Anyway, your call to setItemPrototype should work. However, did you think to reimplement the QStandardItem::clone() method to return an instance of your own class?

        1 Reply Last reply
        0
        • B Offline
          B Offline
          Beka
          wrote on last edited by
          #12

          Yes, I did it, and i debug if it is called, and it works, but my method operator<() is never called

          1 Reply Last reply
          0
          • B Offline
            B Offline
            Beka
            wrote on last edited by
            #13

            I just tried to create two new myItems and compare them, it works, but thats predictable
            but when I called for example myModel->item(r,c)->operator <(other myItem) it isnt called

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre
              wrote on last edited by
              #14

              Could you show us the signature for that function from your header? Did you happen to forget the const perhaps?

              1 Reply Last reply
              0
              • B Offline
                B Offline
                Beka
                wrote on last edited by
                #15

                @ bool operator <(const myItem &other) const;
                virtual myItem *clone() const;@

                and, after i setItemPrototype, will it take care of retrieving myItem insted of QStandardItem? or i must reimplement or functions which i am working with?

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  andre
                  wrote on last edited by
                  #16

                  Are you sure about that space between operator < ?

                  And yes, thanks to polymorphism, your own function should be called if it actually is an object of your own type. How do you actually set your items? The prototype is just for editing and things like that. How do you fill your model?

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    Beka
                    wrote on last edited by
                    #17

                    no, i delete it

                    i fill it with functions setItem or setData

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre
                      wrote on last edited by
                      #18

                      Show, not tell. It is hard to figure out where the mistake in your code is if you don't show your actual code...

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        Beka
                        wrote on last edited by
                        #19

                        yes i know, but the code is really big...
                        @
                        myModel->setItem( row, column, new myItem(QIcon(icon), "some text") );
                        myModel->setData( myModel->index(row, column), "text" );
                        @

                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          andre
                          wrote on last edited by
                          #20

                          So, extract the relevant sections yourself, or create a small, self-contained example that shows the problem. Also, when posting code, please use @ tags around your code section (I already updated your post in this case) to improve readability.

                          Your code, as far as I can oversee it, looks fine to me. I have no idea why it should fail.

                          1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            Beka
                            wrote on last edited by
                            #21

                            Okay thank you, i try to override some other methods on model, which can be the problem, and if it wont wors, i paste the code

                            1 Reply Last reply
                            0
                            • B Offline
                              B Offline
                              Beka
                              wrote on last edited by
                              #22

                              I have one more question, if I override operator<() will it be called by QStandardItem::sort() ?? because i was said to override operator<() to sort like we want, but would be it ever called from sort() ??

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                andre
                                wrote on last edited by
                                #23

                                It should be called from there yes. It is the whole point of the function being there and being virtual.

                                1 Reply Last reply
                                0
                                • B Offline
                                  B Offline
                                  Beka
                                  wrote on last edited by
                                  #24

                                  I dont know how to reimplement method item, that it will return myItem, i looked into the sourcecodes, but i dont know what to do... a just think about copy data from myModel->item(r,c); but the method return the pointer, and i will then dont return the exact pointer
                                  @QStandardItem *QStandardItemModel::item(int row, int column) const
                                  {
                                  Q_D(const QStandardItemModel);
                                  return d->root->child(row, column);
                                  }@

                                  and i think about the reimplementing the setItem, because i dont know either how to do it :(
                                  i dont know what to do... sources doesnt help me much, that are so many functions i cant use

                                  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