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 では、2 つの文字列が同じようにレンダリングされても、実際には異なる場合があります。その場合は、最初に文字列を正規化する必要があります。

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

もちろん、users マップに入れる前に文字列を正規化する必要があります。

于 2010-10-21T17:32:45.100 に答える