2016-06-13 171 views
1

我有一個XML文件,其中包含一些具有名稱和用戶列表的組。在我在構造函數中的代碼,我設置了一個字典此列表:ReadConfig();QMap中的項目丟失

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

這就是:

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

在headerfile作爲

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

然後我讀了文件,它聲明我的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; 
       } 
      } 
     } 
    } 
} 

我的問題是,插入在dictGroups而ReadGroups丟失的項目。我得到調試輸出

ReadConfig_isEmpty

但ReadGroups似乎一切正常。 我不知所措,困惑了幾個小時,任何人都可以幫忙找到原因嗎?

+0

你絕對肯定你插入任何東西到'dictGroups'? – thuga

+0

是的:(我的調試打印我插入消息和ReadGroups_isEmpty不會被寫入,並且它不會插入'管理員'用戶,如果字典是空的,因爲在這一步它不是空的 –

+1

很難說什麼沒有[SSCCE](http://sscce.org) – thuga

回答

1

你有這樣的代碼:

dictGroups.clear(); 

你爲什麼想到dictGroups當你清除它們的外層循環的每個迭代持續下去?不要這樣做。

clear聲明也許屬於ReadConfig的開頭。

儘管您的方法名稱大小寫在Qt代碼中非常不合適:大寫字母的名稱通常是爲組保留的。

+0

你說得對,ReadGroups方法在通過xml-end-tag進入時第二次調用,這是一個愚蠢的錯誤,非常感謝。 –

+0

有史以來,格式化我的代碼是「味道的問題」,現在我找了一個規則,但發現這[鏈接](http://stackoverflow.com/q/1776291/2747431) –