4

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

QMap<QString, Connection*> users;

现在,在下面的函数 Foo() 中,if 子句总是返回 false,但是当我遍历映射时,比较的 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();
    }
}

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

4

1 回答 1

5

使用 unicode,两个字符串可能呈现相同但实际上不同。假设是这种情况,您首先要规范化字符串:

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

当然,您还需要在将字符串放入用户映射之前对其进行规范化。

于 2010-10-21T17:32:45.100 回答