【问题标题】:QMap::contains() not returning expected valueQMap::contains() 未返回预期值
【发布时间】:2010-10-21 17:12:59
【问题描述】:

我有一个包含 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 ?

【问题讨论】:

  • 您的问题有错字吗?你说str2 存在于键中,但你正在检查users 是否包含str1
  • 我已经完成了必要的编辑。

标签: c++ qt qmap


【解决方案1】:

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

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

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

【讨论】:

  • 即使在存储到 QMap 和检查之前标准化 QString 之后,contains() 也只会返回 false。
  • 请告诉我们这些字符串有什么不同。例如,qDebug() &lt;&lt; str.toUtf8() 应该向我们展示创建字符串的实际字节。
  • 清理项目并重建后,它工作了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 2016-02-13
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多