QHash Elemente entfernen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • QHash Elemente entfernen

    hallo liebe community,
    ich wende mich wiedermal voller hoffnung an euch, weil ich an einem punkt nicht weiterkomme. ich habe eine klasse erstellt. von dieser klassen erzeuge ich während der laufzeit mit new instanzen die ich in einem hash speichere.

    QHash<QString, Object*>

    key speichert die ID der objekte und value den pointer des objektes welches ich anlege.

    wenn alle objekte angelegt worden sind arbeite ich mit dem hash. nur bestimmte objekte brauche ich. diese nehme ich durch abfragen aus dem hash, indem ich einfach mit hash.value(ID) an das value komme. ich bekomme das richtige objekt zurück und kann damit arbeiten. im nächsten schritt habe ich versucht mit remove() das verwendete objekt aus dem hash zu entfernen, indem ich die ID übergebe. ich bekomme als rückgabewert eine 1. laut doku bedeuted dies das ich ein item aus dem hash entfernt habe. wenn ich jedoch die hashgröße abfrage ist dieser immer noch gleichgroß. nichts wurde entfernt.
    paradox !?!?!?!?!?!

    Quellcode

    1. QHashIterator<QString, OSM_Relation*> iRelation(parser->getConvertableRelations());
    2. while (iRelation.hasNext())
    3. {
    4. iRelation.next();
    5. out << QString("relation");
    6. for(int i = 0; i < iRelation.value()->getOuterWayList().size(); i++)
    7. {
    8. qDebug() << "RELATIONS";
    9. qDebug() << "Outerlist: " << iRelation.value()->getOuterWayList().size();
    10. if(parser->getConvertableWays().contains(iRelation.value()->getOuterWayList().value(i)))
    11. {
    12. qDebug() << "ConvertableWays: " << parser->getConvertableWays().size();
    13. OSM_Way *way = parser->getConvertableWays().value(iRelation.value()->getOuterWayList().value(i));
    14. QString value = way->getValue();
    15. qDebug() << value;
    16. out << QString("value") << value << QString("outer");
    17. for(int k = 0; k < way->getReferenceList().size(); k++)
    18. {
    19. if(parser->getNodeContainer().contains(way->getReferenceList().value(k)))
    20. {
    21. QList<QString> tempList = math->convertCoordinates(parser->getNodeContainer().value(way->getReferenceList().value(k))->getLatitude(),
    22. parser->getNodeContainer().value(way->getReferenceList().value(k))->getLongitude());
    23. out << QString("pos") << tempList.at(0) << tempList.at(1);
    24. numberOfConvertedNodes++;
    25. }
    26. }
    27. int zahl = parser->getConvertableWays().remove(way->getId(),way);
    28. qDebug() << "ConvertableWays: " << parser->getConvertableWays().size() << " and " << zahl;
    29. numberOfConvertedWays++;
    30. }
    31. }
    Alles anzeigen


    ich habe mal rumgetestet. bei dem folgenden beispiel geht es ohne probleme.

    Quellcode

    1. QHash<int,QString> test;
    2. test.insert(1,"Bernd");
    3. test.insert(2,"Hans");
    4. test.insert(3,"Dieter");
    5. qDebug() << test.size();
    6. zahl = test.remove(2);
    7. qDebug() << zahl;
    8. qDebug() << test.size();


    kann mir das ganze einfach nicht erklären. da er mir das richtige objekt mittels der ID zurückgibt.