QMap :: contains()没有返回预期值

Sau*_*nda 4 c++ qt qmap

我有一个包含QMap对象的类:

QMap<QString, Connection*> users;
Run Code Online (Sandbox Code Playgroud)

现在,在下面的函数Foo()中,if子句总是返回false,但是当我遍历map时,比较的QString,即str1存在于键中.

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?为什么不包含()返回true?

Kal*_*son 5

使用unicode,两个字符串可以呈现相同但实际上是不同的.假设情况如此,您首先需要规范化字符串:

str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
    // do something useful
Run Code Online (Sandbox Code Playgroud)

当然,在将字符串放入用户地图之前,您还需要规范化字符串.