QT xml解析

image.png


    
        
            
                打开
                OPENFILE
                Y
                60,60
                打开文件(Ctrl+O)
                toolbutton
            
            
                新建
                NEWFILE
                Y
                60,60
                新建文件(Ctrl+N)
                toolbutton
            
            
                保存
                SAVEFILE
                Y
                60,60
                保存文件(Ctrl+S)
                toolbutton
            
            
                另存
                SAVEASFILE
                Y
                60,60
                另存文件(Ctrl+Shift+S)
                toolbutton
            
        
        
            
                撤销
                UNDO
                Y
                60,60
                撤销(Ctrl+Z)
                toolbutton
            
            
                恢复
                REDO
                Y
                60,60
                恢复(Ctrl+Y)
                toolbutton
            
        
        
         


//定义数据结构
struct buttonInfo
{//对应图片按钮
    QString name;
    QString cmd;
    bool  visible;
    QString tips;
};

struct groupInfo
{//对应图片中 文件编辑/操作/导入 组
    QString groupName;
    QList btnVec;
};

QMap >  m_map; //key:widget名字 //value: 组信息

//接口
void parse_xml(const QString& filePath, QMap >& mapData)
{
    QFile file(filePath);
    if (!file.open(QFile::ReadOnly | QFile::Text))
    {
        return ;
    }

    QXmlStreamReader reader(&file);
    while (!reader.atEnd() && !reader.hasError())
    {//widget
        if (reader.isStartElement() && reader.name() == "widget")
        {
            QString widgetName;
            auto attributes = reader.attributes();
            if (attributes.isEmpty())
                widgetName = "NA";
            else
                widgetName = attributes.value("name").toString();

            QList  _groupList;
            while (!reader.hasError())
            {//group
                if (reader.isEndElement() && reader.name() == "widget")
                    break;

                if (reader.isStartElement() && reader.name() == "group")
                {
                    groupInfo _groupObj;
                    QString groupName;
                    auto attributes = reader.attributes();
                    if (attributes.isEmpty())
                        groupName = "NA";
                    else
                        groupName = attributes.value("name").toString();

                    _groupObj.groupName = groupName;


                    while (!reader.hasError())
                    {//toolbutton
                        if (reader.isEndElement() && reader.name() == "group")
                            break;

                        if(reader.isStartElement() &&  reader.name() == "qobject")
                        {
                            buttonInfo btnObj;
                            while (!reader.hasError())
                            {
                                if (reader.isEndElement() && reader.name() == "qobject")
                                    break;
                                if (reader.isStartElement() && reader.name() == "name")
                                {
                                    btnObj.name = reader.readElementText();
                                }
                                else if (reader.isStartElement() && reader.name() == "command")
                                {
                                    btnObj.cmd = reader.readElementText();
                                }
                                else if (reader.isStartElement() && reader.name() == "visible")
                                {
                                    btnObj.visible = reader.readElementText() == "true" ? true : false;
                                }
                                else if (reader.isStartElement() && reader.name() == "tips")
                                {
                                    btnObj.tips = reader.readElementText();
                                }
                                reader.readNext();
                            }
                            _groupObj.btnVec.append(btnObj);
                        }
                        reader.readNext();
                    }

                    _groupList.append(_groupObj);
                }

                reader.readNext();
            }

            mapData[widgetName] = _groupList;
        }

        reader.readNext();
    }
}


获取完数据后,我们就可以根据map里的数据 进行绘图啦

你可能感兴趣的:(QT xml解析)