头文件
#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();
- 详解
- 创建用于存储的文件
QFile file("output.xml"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug()<<"output.xml file open fail"; }
- 创建名为
writer
的QXmlStreamWriter
对象,并将其输出设备设置为file
。QXmlStreamWriter writer(&file);
设置自动格式(可不加)
writer.setAutoFormatting(true);
- 创建一个名为 Function 2 的元素
writer.writeStartElement("Function 2");
- 为元素添加属性,每个属性都由一个名称和一个值组成 (可添加多个)
writer.writeAttribute("m_A", QString::number(m_A_2)); writer.writeAttribute("m_B", QString::number(m_B_2));
结束当前元素的写入
writer.writeEndElement();
- 现象
- 调用代码,运行程序.在构建的地方出现名为 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(); // 读取下一个元素
}
- 详解
- 打开用于存储的文件
QFile file("output.xml"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"output.xml file open fail"; }
- 创建名为reader的QXmlStreamReader对象,并将其输出设备设置为 file。
QXmlStreamReader reader(&file); // 创建 XML 写入器并设置输出设备为文件
- 检查当前是否已经读到了输入的结尾,或者当前是否有错误。
while (!reader.atEnd() && !reader.hasError()) {
- 判断是否为元素开始标签,如果是则根据元素名进行判断,读取各自属性。
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(); // 读取下一个元素 }
- 根据属性名获取对应的文本内容
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();
对下一个元素进行读取
reader.readNext();