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?

Était-ce utile?

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
scroll top