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 !?!?!?!?!?!

    QHashIterator<QString, OSM_Relation*> iRelation(parser->getConvertableRelations());
    		while (iRelation.hasNext()) 
    		{
    			iRelation.next();
    
    			out << QString("relation");
    
    			for(int i = 0; i < iRelation.value()->getOuterWayList().size(); i++)
    			{
    				qDebug() << "RELATIONS";
    				qDebug() << "Outerlist: " << iRelation.value()->getOuterWayList().size();
    
    			    if(parser->getConvertableWays().contains(iRelation.value()->getOuterWayList().value(i)))
    				{
    					qDebug() << "ConvertableWays: " << parser->getConvertableWays().size();
    					OSM_Way *way = parser->getConvertableWays().value(iRelation.value()->getOuterWayList().value(i));
    					QString value = way->getValue();
    					qDebug() << value;
    
    					out << QString("value") << value << QString("outer");
    
    					for(int k = 0; k < way->getReferenceList().size(); k++)
    					{					
    						if(parser->getNodeContainer().contains(way->getReferenceList().value(k)))
    						{
    							QList<QString> tempList = math->convertCoordinates(parser->getNodeContainer().value(way->getReferenceList().value(k))->getLatitude(),
    									     									   parser->getNodeContainer().value(way->getReferenceList().value(k))->getLongitude());
    
    							out << QString("pos") << tempList.at(0) << tempList.at(1);
    
    							numberOfConvertedNodes++;
    						}
    					}
    					int zahl = parser->getConvertableWays().remove(way->getId(),way);
    					qDebug() << "ConvertableWays: " << parser->getConvertableWays().size() << " and " << zahl;
    					numberOfConvertedWays++;
    				}				
    			}
    

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

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

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



  • Komplett falsches Forum: Hier ist C++/CLI und das hat nichts mit Qt zu tun.
    Simon


Log in to reply