質問

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を使用すると、2つの文字列が同じレンダリングされる可能性がありますが、実際には異なります。それがあなたがしたい場合であると仮定します ノーマライズ 最初に文字列:

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

もちろん、ユーザーマップにも文字列を配置する前に、文字列を正規化する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top