Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Not able to use QList<Class> ComponentA (solved)

    General and Desktop
    3
    16
    3073
    Loading More Posts
    • 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.
    • p3c0
      p3c0 Moderators @alvinNew last edited by p3c0

      @alvinNew No need to hard code. You just need to store those values in an object of CComponent and add it to list. Define some setter methods in CComponent for storing values.

      class CComponent{
          public:
          QString ComponentID;
          QString ComponentType;
          ...
      
          void setComponentId(QString id) {
          ComponentID = id;
          }
      
          void setComponentType(QString type) {
          ComponentType = type;
          }
      };
      
      //Then during appending
      
      QList<CComponent> ComponentA;
      while (xmlGet.findNextAndDescend("Component"))
      {
            QString ComponentID = xmlGet.getAttributeString("ID","unknown");
            QString ComponentType = xmlGet.getAttributeString("Type","unknown");
      
             CComponent comp;
             comp.setComponentId(ComponentID); //store values
             comp.setComponentType(ComponentType); //store values
      
             //add that object to QList
             ComponentA.append(comp);
      }
      

      157

      A 1 Reply Last reply Reply Quote 0
      • A
        alvinNew @p3c0 last edited by

        @p3c0

        Many thanks, i can learn alot from your simple coding.

        p3c0 1 Reply Last reply Reply Quote 0
        • p3c0
          p3c0 Moderators @alvinNew last edited by p3c0

          @alvinNew You're Welcome :) Happy Coding ...
          Also use ``` (3 backticks), key just above the tab button on keyboard for posting code blocks.

          157

          1 Reply Last reply Reply Quote 0
          • H
            houmingc last edited by

            My code is in pastebin, http://pastebin.com/JwKjfW0b
            Like to ask how to read out the data in the class ( CComponent )

            p3c0 1 Reply Last reply Reply Quote 0
            • p3c0
              p3c0 Moderators @houmingc last edited by

              @houmingc You will need to write getter methods as well which will return the values stored in those variables.

              157

              1 Reply Last reply Reply Quote 0
              • H
                houmingc last edited by houmingc

                Code below is not working although no compiler error

                QList<CComponent> list;
                
                   QListIterator<CComponent> i(list);
                   while(i.hasNext()){
                       qDebug()<<"xxxx is "<<ComponentTemplate.ComponentX;
                   }
                p3c0 2 Replies Last reply Reply Quote 0
                • p3c0
                  p3c0 Moderators @houmingc last edited by

                  @houmingc You are doing it wrong. First create some getter methods as said earlier. Then you need to cast the item to CComponent in the loop and access the getter methods to get the values stored in it.

                  157

                  1 Reply Last reply Reply Quote 0
                  • p3c0
                    p3c0 Moderators @houmingc last edited by p3c0

                    @houmingc Something like this

                    //CComponent class
                    
                    void CComponent::setId(QString id)
                    {
                        m_id = id;
                    }
                    
                    QString CComponent::getId()
                    {
                        return m_id;
                    }
                    
                    QString m_id, m_type;
                    

                    then to access after appending to list

                    QList<CComponent *> m_list;
                    ...
                    
                    CComponent *ca = new CComponent;
                    ca->setId("one");
                    ca->setType("big");
                    ...
                    
                    m_list.append(ca);
                    
                    ...
                    
                    QListIterator<CComponent*> i(m_list);
                    while (i.hasNext()) {
                        CComponent *comp = qobject_cast<CComponent*>(i.next()); //qobject_cast - if uses QObject
                        qDebug() << comp->getId() << comp->getType();
                    }
                    
                    

                    157

                    1 Reply Last reply Reply Quote 0
                    • H
                      houmingc last edited by houmingc

                      i have an error at cast object
                      error: no matching function for call to 'qobject_cast(CComponent* const&)'
                      CComponent comp = qobject_cast<CComponent>(i.next());

                      p3c0 1 Reply Last reply Reply Quote 0
                      • H
                        houmingc last edited by

                        qDebug() << ComponentList[0].GetComponentHeight(); // why accessing ComponentList array return error?

                        1 Reply Last reply Reply Quote 0
                        • p3c0
                          p3c0 Moderators @houmingc last edited by

                          @houmingc said:

                          i have an error at cast object
                          error: no matching function for call to 'qobject_cast(CComponent* const&)'
                          CComponent comp = qobject_cast<CComponent>(i.next());

                          Try it exactly how I have posted earlier in the example.

                          qDebug() << ComponentList[0].GetComponentHeight(); // why accessing ComponentList array return error?

                          What error ? ComponentList is a QList, right ?

                          157

                          1 Reply Last reply Reply Quote 0
                          • H
                            houmingc last edited by houmingc

                            I got the each component display. Thanks.
                            No Casting needed.
                            How to get 3rd item of the class? i am now wondering if QList should be used instead of QLinkedList

                               QLinkedList<CComponent>::iterator iterator;
                                for(iterator=ComponentList.begin();iterator != ComponentList.end(); iterator ++)
                                {
                                    qDebug()<<iterator->GetComponentAspectRatio()<<endl;
                                }
                            p3c0 1 Reply Last reply Reply Quote 0
                            • p3c0
                              p3c0 Moderators @houmingc last edited by p3c0

                              @houmingc Casting will be needed if you use QListIterator.

                              QList<CComponent*> m_list;
                              
                              CComponent *ca = new CComponent;
                              ca->setId("one");
                              ca->setType("big");
                              
                              m_list.append(ca);
                              
                              QListIterator<CComponent*> i(m_list);
                              while (i.hasNext()) {
                                  CComponent *comp = qobject_cast<CComponent*>(i.next()); //qobject_cast - if uses QObject
                                  qDebug() << comp->getId() << comp->getType(); //access using QListIterator
                              }
                              
                              /*-------------------------------------------------------------*/
                              
                              qDebug() << m_list[0]->getType() << m_list[0]->getId(); //no need to cast
                              

                              157

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post