C++

38. QXmlStreamReader读取xml--Apple

2021-09-06  本文已影响0人  applecai

一,前言

27. Qtreeview导出xml--Apple的学习笔记关于xml我之前简单学习过,练习的是从treeview中读取二维数组,用Dom库写为xml。网上搜索后,发现有好多xml的处理方式,同时包括使用外部库。然后说dom适合小文件因为是一次写入内存的,QXmlStreamReader比较快,适合大文件,而且灵活。当然他们截图给我官网help上这样描述的,我为什么没想到先去查help呢~

二,需求

用QXmlStreamReader来读取xml文件到treeview显示。

三,遇到的问题

  1. treeview如何添加行。
    答:item->insertChild(i,myChild);
  2. new一个index,保存到堆后,什么时候会销毁?
    答:这个真的不清楚,估计是widget销毁的时候自动销毁。
  3. 如何自定义鼠标的图片?
    答:利用setCursor可以传入QPixmap的方法。
    QPixmap pix(":/res/img/edit.png");
    QSize size(30,30);
    pix = pix.scaled(size,Qt::KeepAspectRatio);
    setCursor(QCursor(pix));
  1. xml内容应该如何设计?
    可以看我之前blog的xml,原来的设计不适合归递处理。所以我重新设计了。
    while(!reader->atEnd())
    {
        QXmlStreamReader::TokenType type=reader->readNext();
        if(type==QXmlStreamReader::StartElement &&  reader->name().toString()=="RTE_type") //从RTE_type开始解析
            ParseEntry(reader,treeview->invisibleRootItem());   //具体解析策略应用
    }
<?xml version="1.0" encoding="UTF-8"?>
<RTEVFB>
    <RTE_type type="SWCs">
        <name term="name of APP module">MDL_AppleCai</name>
        <name term="name of sensorActuator">MDL_HeatWater</name>
    </RTE_type>
    <RTE_type type="PORTs">
        <name term="used to get info">rpSR_GetInfo</name>
        <name>ppSR_SetDeviceCmd</name>
        <name>rpSR_monitorWater</name>
        <name>rpSR_GetDeviceCmd</name>
        <name>ppSR_GetInfo</name>
        <name>ppSR_monitorWater</name>
    </RTE_type>
    <RTE_type type="INTERFACEs">
        <name term="for QM module">if_Done</name>
        <name>if_GetInfo</name>
        <name>if_SetDeviceCmd</name>
        <name>if_monitorWater</name>
    </RTE_type>
</RTEVFB>

四,效果

image.png

五,小结

我就喜欢折腾学习新方法,就喜欢同样的事情用不同的方法。方法越多,备份方案越多,将来真要用的时候,处理问题的效率越高。这就是我的处事逻辑,哈哈~

上一篇 下一篇

猜你喜欢

热点阅读