2010-10-21 99 views
3

我有一个包含QMAP对象的类: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(); 
    } 
} 

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

+0

在你的问题中是否有错字?你说'str2'出现在键中,但是你正在检查'users'是否包含'str1'。 – 2010-10-21 17:21:49

+0

我已经完成了必要的编辑。 – 2010-10-21 17:26:31

回答

4

使用unicode时,两个字符串可能会呈现相同但实际上不同。假设这是你要第一normalize字符串的情况:

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

当然,你需要你把它放在你的用户之前映射以及正常化的字符串。

+0

即使在将QString存储到QMap之前且在检查之前对它进行规范化之后,contains()仅返回false。 – 2010-10-21 17:46:15

+0

请向我们展示字符串以何种方式不同。例如,'qDebug()<< str.toUtf8()'应该向我们显示创建字符串的实际字节。 – 2010-10-21 17:55:55

+0

清洁后的项目和重建,它的工作。谢谢。 – 2010-10-21 17:56:27