题
我有一个包含 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 ?
解决方案
使用 unicode,两个字符串可能呈现相同但实际上不同。假设是这种情况,你会想要 正常化 首先是字符串:
str = str.normalize(QString::NormalizationForm_D);
if (users.contains(str))
// do something useful
当然,在将字符串放入用户映射之前,您还需要对其进行规范化。
不隶属于 StackOverflow