Frage

Ich habe eine Klasse, die ein QMap Objekt enthält:

QMap<QString, Connection*> users;

Nun, in der folgenden Funktion Foo (), die, wenn Klausel immer false zurück, aber wenn ich Iterierte durch die Karte, die im Vergleich QString, das heißt str1 in den Tasten vorhanden.

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

Bin ich etwas falsch? Warum nicht enthält () return true?

War es hilfreich?

Lösung

Mit Unicode können zwei Strings gleich gemacht werden, aber tatsächlich unterschiedlich sein. Unter der Annahme, dass der Fall Sie werden an normalisieren die Saiten zuerst :

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

Natürlich müssen Sie die Zeichenfolge normalisieren, bevor Sie sie in Ihren Benutzern setzen Karte auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top