QMap中的项目丢失
我有一个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似乎一切正常。 我不知所措,困惑了几个小时,任何人都可以帮忙找到原因吗?
你有这样的代码:
dictGroups.clear();
你为什么想到dictGroups
当你清除它们的外层循环的每个迭代持续下去?不要这样做。
clear
声明也许属于ReadConfig
的开头。
尽管您的方法名称大小写在Qt代码中非常不合适:大写字母的名称通常是为组保留的。
你说得对,ReadGroups方法在通过xml-end-tag进入时第二次调用,这是一个愚蠢的错误,非常感谢。 –
有史以来,格式化我的代码是“味道的问题”,现在我找了一个规则,但发现这[链接](http://stackoverflow.com/q/1776291/2747431) –
你绝对肯定你插入任何东西到'dictGroups'? – thuga
是的:(我的调试打印我插入消息和ReadGroups_isEmpty不会被写入,并且它不会插入'管理员'用户,如果字典是空的,因为在这一步它不是空的 –
很难说什么没有[SSCCE](http://sscce.org) – thuga