QT4.8 XML记录

头文件

#include <QFile>
#include <QXmlStreamWriter>

 写操作

    QFile file("output.xml");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        qDebug()<<"output.xml file open fail";
    }
    // 创建 XML 写入器并设置输出设备为文件
    QXmlStreamWriter writer(&file);
    writer.setAutoFormatting(true);  // 设置自动格式化为true
    writer.writeStartElement("General_setting");/*General_setting*/
    writer.writeAttribute("m_step", QString::number(m_step));
    writer.writeAttribute("m_X_Zoom", QString::number(m_X_Zoom));
    writer.writeAttribute("m_Y_Zoom", QString::number(m_Y_Zoom));
    writer.writeAttribute("m_ORGX",QString::number(m_ORGX));
    writer.writeAttribute("m_ORGY",QString::number(m_ORGY));
    writer.writeAttribute("m_FunNum",QString::number(m_FunNum));

    writer.writeStartElement("Function_1");
    writer.writeAttribute("m_A", QString::number(m_A));
    writer.writeAttribute("m_B", QString::number(m_B));
    writer.writeAttribute("m_C", QString::number(m_C));
    writer.writeAttribute("m_D", QString::number(m_D));
    writer.writeAttribute("m_E", QString::number(m_E));
    writer.writeEndElement();

    writer.writeStartElement("Function_2");
    writer.writeAttribute("m_A_2", QString::number(m_A_2));
    writer.writeAttribute("m_B_2", QString::number(m_B_2));
    writer.writeEndElement();
    writer.writeEndElement();
  1. 详解
    1. 创建用于存储的文件
          QFile file("output.xml");
          if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
              qDebug()<<"output.xml file open fail";
          }
    2. 创建名为 writerQXmlStreamWriter 对象,并将其输出设备设置为 file
      QXmlStreamWriter writer(&file);
    3. 设置自动格式(可不加)

      writer.setAutoFormatting(true);
    4. 创建一个名为 Function 2 的元素
          writer.writeStartElement("Function 2");
      
    5. 为元素添加属性,每个属性都由一个名称和一个值组成   (可添加多个)
          writer.writeAttribute("m_A", QString::number(m_A_2));
          writer.writeAttribute("m_B", QString::number(m_B_2));
    6.  结束当前元素的写入

          writer.writeEndElement();
      
  2. 现象
    1. 调用代码,运行程序.在构建的地方出现名为 output.xml 的文件,用记事本打开.

 读操作: XmlRead(reader)

    QFile file("output.xml");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug()<<"output.xml file open fail";
    }
    QXmlStreamReader reader(&file);    // 创建 XML 写入器并设置输出设备为文件
    while (!reader.atEnd() && !reader.hasError())
    {
        qDebug() << "Element name: " << reader.name().toString();
        if (reader.isStartElement())
        {
            if (reader.name() == "General_setting")            // 处理通用设置元素的属性
            {
                QXmlStreamAttributes attributes = reader.attributes();
                m_step   = attributes.value("m_step").toString().toInt();
                m_X_Zoom = attributes.value("m_X_Zoom").toString().toDouble();
                m_Y_Zoom = attributes.value("m_Y_Zoom").toString().toDouble();
                m_ORGX   = attributes.value("m_ORGX").toString().toDouble();
                m_ORGY   = attributes.value("m_ORGY").toString().toDouble();
                m_FunNum = attributes.value("m_FunNum").toString().toInt();
            }
            else if (reader.name() == "Function_1")// 处理 Function1 元素的属性
            {
                QXmlStreamAttributes attributes = reader.attributes();
                m_A = attributes.value("m_A").toString().toDouble();
                m_B = attributes.value("m_B").toString().toDouble();
                m_C = attributes.value("m_C").toString().toDouble();
                m_D = attributes.value("m_D").toString().toDouble();
                m_E = attributes.value("m_E").toString().toDouble();
            }
            else if (reader.name() == "Function_2")// 处理 Function2 元素
            {
                QXmlStreamAttributes attributes = reader.attributes();
                m_A_2 = attributes.value("m_A_2").toString().toDouble();
                m_B_2 = attributes.value("m_B_2").toString().toDouble();
            }
        }
        reader.readNext();                           // 读取下一个元素
    }

  1.  详解
    1. 打开用于存储的文件
          QFile file("output.xml");
          if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
              qDebug()<<"output.xml file open fail";
          }
    2. 创建名为readerQXmlStreamReader对象,并将其输出设备设置为 file
          QXmlStreamReader reader(&file);    // 创建 XML 写入器并设置输出设备为文件
      
    3. 检查当前是否已经读到了输入的结尾,或者当前是否有错误。
          while (!reader.atEnd() && !reader.hasError())
          {
    4. 判断是否为元素开始标签,如果是则根据元素名进行判断,读取各自属性。
          while (!reader.atEnd() && !reader.hasError())
          {
              qDebug() << "Element name: " << reader.name().toString();
              if (reader.isStartElement())
              {
                  if (reader.name() == "General_setting")            // 处理通用设置元素的属性
                  {
                      QXmlStreamAttributes attributes = reader.attributes();
                      m_step   = attributes.value("m_step").toString().toInt();
                      m_X_Zoom = attributes.value("m_X_Zoom").toString().toDouble();
                      m_Y_Zoom = attributes.value("m_Y_Zoom").toString().toDouble();
                      m_ORGX   = attributes.value("m_ORGX").toString().toDouble();
                      m_ORGY   = attributes.value("m_ORGY").toString().toDouble();
                      m_FunNum = attributes.value("m_FunNum").toString().toInt();
                  }
                  else if (reader.name() == "Function_1")// 处理 Function1 元素的属性
                  {
                      QXmlStreamAttributes attributes = reader.attributes();
                      m_A = attributes.value("m_A").toString().toDouble();
                      m_B = attributes.value("m_B").toString().toDouble();
                      m_C = attributes.value("m_C").toString().toDouble();
                      m_D = attributes.value("m_D").toString().toDouble();
                      m_E = attributes.value("m_E").toString().toDouble();
                  }
                  else if (reader.name() == "Function_2")// 处理 Function2 元素
                  {
                      QXmlStreamAttributes attributes = reader.attributes();
                      m_A_2 = attributes.value("m_A_2").toString().toDouble();
                      m_B_2 = attributes.value("m_B_2").toString().toDouble();
                  }
              }
              reader.readNext();                           // 读取下一个元素
          }
      
    5. 根据属性名获取对应的文本内容
                      QXmlStreamAttributes attributes = reader.attributes();        //获取当前节点属性
                      m_step   = attributes.value("m_step").toString().toInt();
                      m_X_Zoom = attributes.value("m_X_Zoom").toString().toDouble();
                      m_Y_Zoom = attributes.value("m_Y_Zoom").toString().toDouble();
                      m_ORGX   = attributes.value("m_ORGX").toString().toDouble();
                      m_ORGY   = attributes.value("m_ORGY").toString().toDouble();
                      m_FunNum = attributes.value("m_FunNum").toString().toInt();
    6.  对下一个元素进行读取

      reader.readNext(); 
      

     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值