Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QMap::contains()未返回预期值_C++_Qt_Qmap - Fatal编程技术网

C++ QMap::contains()未返回预期值

C++ QMap::contains()未返回预期值,c++,qt,qmap,C++,Qt,Qmap,我有一个包含QMap对象的类: QMap<QString, Connection*> users; QMap用户; 现在,在下面的函数Foo()中,if子句总是返回false,但是当我遍历映射时,比较的QString,即str1出现在键中 void Foo(QString& str1, QString& str2) { if(users.contains(str1)) users[str1]->doStuff(str2);

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

QMap<QString, Connection*> users;
QMap用户;
现在,在下面的函数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();
    }
}
void Foo(QString&str1、QString&str2)
{    
if(users.contains(str1))
用户[str1]->doStuff(str2);
其他的
{
for(QMap::iterator iter=users.begin();
iter!=users.end();iter++)

qDebug()使用unicode时,两个字符串可能呈现为相同的,但实际上不同。假设是这种情况,您希望首先显示字符串:

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

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

您的问题中是否有输入错误?您说键中存在
str2
,但您正在检查
users
是否包含
str1
。我已经完成了所需的编辑。即使在将QString规范化之后,也会将其存储到QMap中在检查之前,contains()只返回false。请告诉我们字符串的不同方式。例如,
qDebug()在清理项目并重建后,它成功了。谢谢。