Important: Please read the Qt Code of Conduct -

Change items in a container (e.g. QList)

  • Hi.
    I have a QList<MyClass> and i want to access and change the items in the list. Through google i came up with

    list->operator [](index).setSomeValue();

    where list is a pointer to QList.
    I have two questions. Why


    doesnt work? Shouldnt it be the same?
    And the second: when i come to this point "list->operator [] (index)." the qcreator doesnt show me any posibility to chose something in the autocompletion, although when i just type the setSomeValue() after the point it compiles and work?

    Perhas there is a better way to change an item in a container?

  • Lifetime Qt Champion

    is that

    QList<MyClass> mylist;
    QList<MyClass *> mylist;

    as that change the syntax
    version 1 would be
    and version 2 would be

  • it is

    QList<MyClass> *list = new QList<MyClass>

    and when im doing mylist[index].setSomeValue(); is says there is no member named setSomeValue

  • Lifetime Qt Champion

    class MyClass {
      void bing() {};
      MyClass() {}
      QList<MyClass>* list = new QList<MyClass>;
      MyClass tmp;
    (delete list;)

    Can I ask why you want the list to be a pointer to a list and not just a list?

  • Lifetime Qt Champion

    @Maser As @mrjj said: list is a pointer, so you have first to dereference it and then use [] operator:


  • Ah, thanks. I didnt thought of seting parenthesize the dereferencing.
    Well, all the Qt examples create pointer and then create the container on the heap, dont they?

  • Lifetime Qt Champion

    well the normal case if that its a non pointer
    QList<MyClass *> list;

    but you get same situation if u send it as paramater

    void somefunc( QList<MyClass *> * List);


    so it really depends on what you do with list and how long it must live.
    (note normally it would be &)

  • I dont understand. What QList<MyClass *> list; benefits me? That i only have to create them once? Doesnt QList<MyClass> *list do the same as i create the items on the heap and pass the pointer around?

  • Lifetime Qt Champion

    all QWidgets are QObjects.
    QObjects have copy constructor disabled. They cannot be cloned.
    So you cannot have QWidgets in a list if you define it as
    IT must be pointers.

    However for you own classes, there is no need for pointers.

    QList<MyClass> *list = pointer to list of objects. Not possible with most QWidgets
    QList<MyClass *> *list = pointer to list of pointers to objects. can contain QWidgets
    QList<MyClass> list; Just a list of Myclasses. ( best option normally)

  • So this means if i have my class derived from QObject, i can only store them as pointers like QList<MyClass *> *list or QList<MyClass *> list ?

  • Lifetime Qt Champion

    yes correct.

  • A, thanks! One more mystery solved)) I already wondered why when i wanted add to MyClass the abilities from QObject something crash down in my program, so i made some workarounds)

  • Lifetime Qt Champion

    Also, just as note.
    Most QWidgets takes a parent (another qwidget) in constructor.
    It means the parent now owns the child and will delete it when it dies it self.

    So if you have childs in a list and give them to parents,
    the list should Not delete the childs as the parent will. :)

  • Ye, i stil havent had time to go into that stuff with smartpointers and all)

  • Lifetime Qt Champion

    well its not so much smart pointers but more a ownership.
    Must Widgets in Qt can own other widgets and will delete them when deleted.

    So often even you new a Qwidget you dont need to delete it yourself as parent will.

  • Yes, but this is stil related to watching for pointers, if they stil good or deleted somewhere else, doesnt it?

    BTW, why cant i mark the thread solved?

  • Lifetime Qt Champion

    yes watching pointers is always needed :)

    • BTW, why cant i mark the thread solved?
      You might not have asked it as question.
      On first post look in topic tools button.
      There is "Ask as Question"
      Then you can mark it as solved :)

  • Tricky) Thanks.

  • Lifetime Qt Champion

    yes its slightly funky :)

Log in to reply