QMap中的项目丢失了

时间:2016-06-13 12:25:07

标签: c++ qt

我有一个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似乎一切正常。 我不知所措,困惑了好几个小时,有人可以帮忙找到原因吗?

1 个答案:

答案 0 :(得分:1)

您有以下代码:

dictGroups.clear();

为什么在外循环的每次迭代中清除它们时,期望dictGroups保持不变?不要那样做。

clear语句可能属于ReadConfig的开头。

您的方法名称大小写在Qt代码中非常不合适:大写名称按照惯例保留给组。