Results 1 to 19 of 19

Thread: QList question

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Jan 2006
    Location
    Ljubljana
    Posts
    687
    Qt products
    Qt5 Qt/Embedded
    Platforms
    MacOS X Unix/X11 Windows Android
    Thanks
    111
    Thanked 4 Times in 4 Posts

    Angry QList question

    Hi to all!

    I've read the docs about QList but I did not find any answers regarding my question. So, after QList method http://doc.trolltech.com/4.3/qlist.html#append, the record is not added to QList. What are possible reasons?
    Qt 5.3 Opensource & Creator 3.1.2

  2. #2
    Join Date
    Apr 2008
    Posts
    104
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    8
    Thanked 7 Times in 7 Posts

    Default Re: QList question

    Can you show a code example?

  3. #3
    Join Date
    Jan 2008
    Location
    Brasil
    Posts
    131
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    18
    Thanked 3 Times in 3 Posts

    Lightbulb Re: QList question

    Post part of its code, but you can also use the following:

    Qt Code:
    1. QList<QString> list;
    2. list << "One" << "Two" << "Three" << "Four";
    To copy to clipboard, switch view to plain text mode 

    Marcelo E. Geyer

  4. #4
    Join Date
    Jan 2006
    Location
    Ljubljana
    Posts
    687
    Qt products
    Qt5 Qt/Embedded
    Platforms
    MacOS X Unix/X11 Windows Android
    Thanks
    111
    Thanked 4 Times in 4 Posts

    Default Re: QList question

    This is my code:
    Qt Code:
    1. m_pShoppingCartView->order()->orders().append(tmpOrder); // adds order to internal qlist
    2. int iOrderSize=m_pShoppingCartView->order()->orders().size(); // calcs size
    3. Q_ASSERT_X(iOrderSize>0, "COperationWindow.cpp", "m_pShoppingCartView->order()->orders().size()<0"); // checks size
    To copy to clipboard, switch view to plain text mode 

    The application aborts on Q_ASSERT_X.
    Qt 5.3 Opensource & Creator 3.1.2

  5. #5
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,376
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Thanks
    4
    Thanked 5,019 Times in 4,795 Posts
    Wiki edits
    10

    Default Re: QList question

    Doesn't by any chance orders() return a copy of the list and not a reference?

  6. #6
    Join Date
    Jan 2006
    Location
    Ljubljana
    Posts
    687
    Qt products
    Qt5 Qt/Embedded
    Platforms
    MacOS X Unix/X11 Windows Android
    Thanks
    111
    Thanked 4 Times in 4 Posts

    Default Re: QList question

    Well, inline function order returns pointer:
    Qt Code:
    1. inline CMerchandizeOrder* order()
    2. { return m_pOrder; };
    To copy to clipboard, switch view to plain text mode 
    m_pOrder is declared as:
    Qt Code:
    1. CMerchandizeOrder* m_pOrder;
    To copy to clipboard, switch view to plain text mode 
    and then inline member function orders() returns:
    Qt Code:
    1. inline QList<structOrder> orders()
    2. { return m_Orders; };
    To copy to clipboard, switch view to plain text mode 
    and m_Orders are defined as:
    Qt Code:
    1. private:
    2. QList<structOrder> m_Orders;
    To copy to clipboard, switch view to plain text mode 
    Qt 5.3 Opensource & Creator 3.1.2

  7. #7
    Join Date
    Jan 2006
    Location
    Bremen, Germany
    Posts
    554
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11 Windows
    Thanked 86 Times in 81 Posts

    Default Re: QList question

    Quote Originally Posted by MarkoSan View Post
    Qt Code:
    1. inline QList<structOrder> orders()
    2. { return m_Orders; };
    To copy to clipboard, switch view to plain text mode 
    Here you return a copy of the List.

  8. #8
    Join Date
    Jan 2006
    Location
    Ljubljana
    Posts
    687
    Qt products
    Qt5 Qt/Embedded
    Platforms
    MacOS X Unix/X11 Windows Android
    Thanks
    111
    Thanked 4 Times in 4 Posts

    Default Re: QList question

    Well, how do I recode this code so it will work? I do not know how to make a pointer to QList
    Qt 5.3 Opensource & Creator 3.1.2

  9. #9
    Join Date
    Mar 2006
    Posts
    140
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    8
    Thanked 4 Times in 3 Posts

    Default Re: QList question

    Instead of
    Qt Code:
    1. private:
    2. QList<structOrder> m_Orders;
    To copy to clipboard, switch view to plain text mode 

    use
    Qt Code:
    1. private:
    2. QList<structOrder>* m_Orders;
    To copy to clipboard, switch view to plain text mode 

    The are certain key things you need to be aware of with C++.
    One very important thing is that when you call return at the end of the function, a COPY of the type you're returning is created to hold the data. This is because any variable declared inside a function is a STACK variable for the scope of that function. So if you declare a non pointer variable then return it, in your case in the call to orders(), you've essentially chained your call to .append(tmpOrder) on a copy of the variable that is lost as soon as the next line is called.

    Now by declaring a QList<structOrder>*, at the end of your function you'll be returning a COPY still, but it will be a copy of a POINTER. The actual instantiated QList is on the heap so isn't cleaned up at the end of the function, therefore copied QList*'s data you'll be appending to is valid and won't get lost in transit.

    In terms of architecture, you might want to re-consider this kind of thing anyway and use a wrapper function. A sideline of hiding the QList also is that you could schtick with your non pointer version:
    Qt Code:
    1. void ShoppingCartView::AddOrder(structOrder order)
    2. {
    3. m_Orders.append( order );
    4. }
    To copy to clipboard, switch view to plain text mode 
    Last edited by stevey; 8th May 2008 at 23:20.

  10. #10
    Join Date
    Jan 2006
    Location
    Warsaw, Poland
    Posts
    33,376
    Qt products
    Qt3 Qt4 Qt5 Qt/Embedded
    Platforms
    Unix/X11 Windows Android Maemo/MeeGo
    Thanks
    4
    Thanked 5,019 Times in 4,795 Posts
    Wiki edits
    10

    Default Re: QList question

    Actually he doesn't need a pointer to the list. He needs to return a reference (or pointer) to the list:

    Qt Code:
    1. inline QList<structOrder> &orders() const { return m_Orders; };
    To copy to clipboard, switch view to plain text mode 

    or

    Qt Code:
    1. inline QList<structOrder> *orders() const { return &m_Orders; };
    To copy to clipboard, switch view to plain text mode 

    Of course hiding the implementation detail and exposing a method for adding items to the list as suggested is a much better idea.

  11. #11
    Join Date
    Jan 2006
    Location
    Ljubljana
    Posts
    687
    Qt products
    Qt5 Qt/Embedded
    Platforms
    MacOS X Unix/X11 Windows Android
    Thanks
    111
    Thanked 4 Times in 4 Posts

    Default Re: QList question

    But how do I create a pointer to QList???

    The code
    Qt Code:
    1. m_pOrders=new QList(); // creates new qlist
    2. Q_CHECK_PTR(m_pOrders); // checks creation
    To copy to clipboard, switch view to plain text mode 
    returns an compile error.

    And I need this info urgently please, since I have a demo of application and the app won't compile neither run because i cannot add items to a non created list!!!!
    Qt 5.3 Opensource & Creator 3.1.2

Similar Threads

  1. Sorting using qSort(), - if QList contains POINTERS
    By joseph in forum Qt Programming
    Replies: 13
    Last Post: 18th August 2013, 18:55
  2. Interface methods question
    By sincnarf in forum Qt Programming
    Replies: 3
    Last Post: 5th October 2007, 10:20
  3. QList
    By dragon in forum Qt Programming
    Replies: 11
    Last Post: 9th May 2007, 20:15
  4. QList question
    By aamer4yu in forum Qt Programming
    Replies: 4
    Last Post: 2nd April 2007, 13:43
  5. Accessing QList Objects
    By magikalpnoi in forum Qt Programming
    Replies: 7
    Last Post: 21st September 2006, 20:43

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.