我有一个XML文件,其中包含名称和用户列表的一些组。在我的构造函数代码中,我为此列表设置了一个字典:
dictGroups= QMap<QString, QList<QString>>() ;
在头文件中,它被声明为
public:
QMap<QString, QList<QString>> dictGroups;
然后我读了文件:ReadConfig();
void AppConfig::ReadConfig(void)
{
...
while(!reader.atEnd())
{
ReadGroups(reader);
if (dictGroups.isEmpty()) qDebug()<<"ReadConfig_isEmpty";
}
...
这是我的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似乎一切正常。 我不知所措,困惑了好几个小时,有人可以帮忙找到原因吗?
答案 0 :(得分:1)
您有以下代码:
dictGroups.clear();
为什么在外循环的每次迭代中清除它们时,期望dictGroups
保持不变?不要那样做。
clear
语句可能属于ReadConfig
的开头。
您的方法名称大小写在Qt代码中非常不合适:大写名称按照惯例保留给组。