4

I have a class that contains a QMap object:

QMap<QString, Connection*> users;

Now, in the following function Foo(), the if clause always returns false but when I iterate through the map, the compared QString, i.e., str1 is present in the keys.

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

Am I doing something wrong? Why doesn't contains() return true ?

Caleb Huitt - cjhuitt
  • 14,785
  • 3
  • 42
  • 49
Saurabh Manchanda
  • 1,115
  • 1
  • 9
  • 21

1 Answers1

5

With unicode, two strings may be rendered the same but actually be different. Assuming that's the case you'll want to normalize the strings first:

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

Of course, you'll need to normalize the string before you put it in your users map as well.

azalea
  • 11,402
  • 3
  • 35
  • 46
Kaleb Pederson
  • 45,767
  • 19
  • 102
  • 147