Domanda

Ho una classe che contiene un oggetto QMap:

QMap<QString, Connection*> users;

Ora, nella seguente funzione Foo (), la clausola if restituisce sempre false, ma quando ho iterate attraverso la mappa, il rispetto QString, vale a dire, str1 è presente nelle chiavi.

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();
    }
}

sto facendo qualcosa di sbagliato? Perché non contiene () return true?

È stato utile?

Soluzione

Con unicode, due stringhe può essere reso lo stesso, ma in realtà essere differente. Partendo dal presupposto che è il caso si vorrà normalizzare le corde prima :

str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
    // do something useful

Naturalmente, avrete bisogno di normalizzare la stringa prima di mettere nei vostri utenti mappare pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top