Pregunta

Tengo una clase que contiene un objeto QMap:

QMap<QString, Connection*> users;

Ahora, en la siguiente función Foo (), el si cláusula siempre devuelve falsa pero cuando iterar a través del mapa, la comparación QString, es decir, str1 está presente en las llaves.

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

¿Estoy haciendo algo mal? ¿Por qué no contiene () return true?

¿Fue útil?

Solución

Con Unicode, dos cadenas se puede volver el mismo, pero en realidad sea diferente. Si se asume que es el caso que querrá normalizar las cuerdas primera :

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

Por supuesto, necesitará para normalizar la cadena antes de colocarlo en sus usuarios un mapa también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top