2016-06-13 12 views
1

名前とユーザリストを持ついくつかのグループを含むXMLファイルがあります。 ReadConfig();QMapの項目が失われる

void AppConfig::ReadConfig(void) 
{ 
    ... 
while(!reader.atEnd()) 
{ 
    ReadGroups(reader); 
    if (dictGroups.isEmpty()) qDebug()<<"ReadConfig_isEmpty"; 
} 
    ... 

これは次のとおりです。私は、ファイルを読み込むその後

public: 
QMap<QString, QList<QString>> dictGroups; 

として、それが宣言されているHEADERFILEで

dictGroups= QMap<QString, QList<QString>>() ; 

:コンストラクタでの私のコードでは、私はこのリストのための辞書を設定しています私のReadGroups:

void AppConfig::ReadGroups(QXmlStreamReader &reader) 
{ 
    dictGroups.clear(); 
    while(!reader.atEnd()) 
    { 
     reader.readNext(); 
     if (reader.error()) 
     { 
... 
     } 
     else 
     { 
      if (reader.isStartElement()) 
      { 
       if (reader.name().toString().toLower()=="group"){ 
        ReadGroup(reader); 
        if (dictGroups.isEmpty()) qDebug()<<"ReadGroups_isEmpty"; 
       } 
      } 
      else if (reader.isEndElement()) 
      { 
       if (reader.name().toString().toLower() == "groups") 
       { 
        if(dictGroups.count()<=0){ 
         QList<QString> users= QList<QString>(); 
         users.append(this->GetUsername()); 
         dictGroups.insert("admin", users); 
        } 
        return; 
       } 
      } 
     } 
    } 
} 

私の問題は、ReadGroupsが失われる間にdictGroupsに挿入された項目です。私はReadConfig_isEmpty

が、ReadGroupsでは、すべてがOKであると思われるデバッグ出力に

を取得します。 私は何時間も困惑していますが、誰かがその理由を見つけるのを助けることができますか?

+0

「dictGroups」に何かを挿入することは絶対に肯定的ですか? – thuga

+0

はい:-(私のデバッグではメッセージが挿入され、ReadGroups_isEmptyは書き込まれません。また、このステップでは空ではないため、dictが空の場合は 'admin' -userを挿入しません。 –

+1

難しい – thuga

答えて

1

あなたはこのコードを持っている:

dictGroups.clear(); 

はあなたが外側のループの反復ごとにそれらをクリアするときdictGroupsが続くことを期待するのはなぜ?それをしないでください。

clearステートメントはおそらくReadConfigの先頭に属します。

あなたのメソッド名の大文字小文字は、Qtコードでは大変です。大文字の名前は、慣習的にグループ用に予約されています。

+0

あなたはそうです、メソッドReadGroupsはXML終わりタグを辿るときに二度目に呼ばれます。愚かな間違いです、ありがとうございます。 –

+0

私のコードをフォーマットすることは "味の問題"であると考えられていましたが、今では規制を探しましたが、これを見つけました[リンク](http://stackoverflow.com/q/1776291/2747431) –