QMap :: contains () ne retourne pas la valeur attendue
Question
J'ai une classe qui contient un objet QMap:
QMap<QString, Connection*> users;
Maintenant, dans la fonction suivante Foo (), si la clause retourne toujours faux, mais quand je itérer à travers la carte, le QString par rapport, à savoir, str1 est présent dans les clés.
void Foo(QString& str1, QString& str2)
{
if(users.contains(str1))
users[str1]->doStuff(str2);
else
{
for(QMap<QString, Connection>::iterator iter = users.begin();
iter!= users.end();iter++)
qDebug()<<iter.key();
}
}
Ai-je fait quelque chose de mal? Pourquoi ne pas contains () return true?
La solution
Avec unicode, deux chaînes peut être le même rendu mais en réalité être différent. En supposant que ce soit le cas, vous voulez Normaliser les chaînes premier :
str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
// do something useful
Bien sûr, vous aurez besoin de normaliser la chaîne avant de le mettre dans vos utilisateurs la carte ainsi.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow