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
CComponent
and add it to list. Define some setter methods inCComponent
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); }
-
@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 inCComponent
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); }
-
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 ?
ComponentList
is 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