Not able to use QList<Class> ComponentA (solved)
-
I am able to read XML element into variable.
I need to read XML element into a container QList, thus created the 2 class.
and append the read element into the object.class CComponent{ public: QString ComponentID; QString ComponentType; int ComponentX; int ComponentY; int ComponentWidth; int ComponentHeight; int ComponentZOrder; int ComponentAspectRatio; }; class CBackground{ public: int Transparent; int Red; int Green; int Blue; }; QList<CComponent> ComponentA; QList<CBackground> BackgroundA; while (xmlGet.findNextAndDescend("Component")) { QString ComponentID = xmlGet.getAttributeString("ID","unknown"); QString ComponentType = xmlGet.getAttributeString("Type","unknown"); int ComponentX = xmlGet.getAttributeInt("X"); int ComponentY = xmlGet.getAttributeInt("Y"); int ComponentWidth = xmlGet.getAttributeInt("Width"); int ComponentHeight = xmlGet.getAttributeInt("Height"); int ComponentZOrder = xmlGet.getAttributeInt("ZOrder"); int ComponentAspectRatio = xmlGet.getAttributeInt("AspectRatio"); ComponentA.append(ComponentID); ComponentA.append(ComponentType); ComponentA.append(ComponentX); ComponentA.append(ComponentY); ComponentA.append(ComponentWidth); ComponentA.append(ComponentHeight); ComponentA.append(ComponentZOrder); ComponentA.append(ComponentAspectRatio); -
I am able to read XML element into variable.
I need to read XML element into a container QList, thus created the 2 class.
and append the read element into the object.class CComponent{ public: QString ComponentID; QString ComponentType; int ComponentX; int ComponentY; int ComponentWidth; int ComponentHeight; int ComponentZOrder; int ComponentAspectRatio; }; class CBackground{ public: int Transparent; int Red; int Green; int Blue; }; QList<CComponent> ComponentA; QList<CBackground> BackgroundA; while (xmlGet.findNextAndDescend("Component")) { QString ComponentID = xmlGet.getAttributeString("ID","unknown"); QString ComponentType = xmlGet.getAttributeString("Type","unknown"); int ComponentX = xmlGet.getAttributeInt("X"); int ComponentY = xmlGet.getAttributeInt("Y"); int ComponentWidth = xmlGet.getAttributeInt("Width"); int ComponentHeight = xmlGet.getAttributeInt("Height"); int ComponentZOrder = xmlGet.getAttributeInt("ZOrder"); int ComponentAspectRatio = xmlGet.getAttributeInt("AspectRatio"); ComponentA.append(ComponentID); ComponentA.append(ComponentType); ComponentA.append(ComponentX); ComponentA.append(ComponentY); ComponentA.append(ComponentWidth); ComponentA.append(ComponentHeight); ComponentA.append(ComponentZOrder); ComponentA.append(ComponentAspectRatio); -
I understand and realize that.
But i do not want to hard-code the variable into ComponentA.
How to make Component a QList.It's ok, i create a Component Template and move the contain variable into list before grabbing new data
@alvinNew No need to hard code. You just need to store those values in an object of
CComponentand add it to list. Define some setter methods inCComponentfor 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); } -
@alvinNew No need to hard code. You just need to store those values in an object of
CComponentand add it to list. Define some setter methods inCComponentfor 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); } -
My code is in pastebin, http://pastebin.com/JwKjfW0b
Like to ask how to read out the data in the class ( CComponent ) -
My code is in pastebin, http://pastebin.com/JwKjfW0b
Like to ask how to read out the data in the class ( CComponent ) -
Code below is not working although no compiler error
QList<CComponent> list; QListIterator<CComponent> i(list); while(i.hasNext()){ qDebug()<<"xxxx is "<<ComponentTemplate.ComponentX; } -
Code below is not working although no compiler error
QList<CComponent> list; QListIterator<CComponent> i(list); while(i.hasNext()){ qDebug()<<"xxxx is "<<ComponentTemplate.ComponentX; }@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(); } -
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());@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 ?
ComponentListis a QList, right ? -
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 QLinkedListQLinkedList<CComponent>::iterator iterator; for(iterator=ComponentList.begin();iterator != ComponentList.end(); iterator ++) { qDebug()<<iterator->GetComponentAspectRatio()<<endl; } -
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 QLinkedListQLinkedList<CComponent>::iterator iterator; for(iterator=ComponentList.begin();iterator != ComponentList.end(); iterator ++) { qDebug()<<iterator->GetComponentAspectRatio()<<endl; }@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