2016-06-13 170 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) –