QT 编写xml文件实例

直接说方法吧:

1. xml 是QT 另外需要手动添加的模块。  在pro 文件中需要手动添加: QT += xml 

2.xml头文件需要用到 #include<QtXml>, 当然这是包含了xml 所有的内容, 如果相只操作其中部分功能, 可以使用 #include<QtXml/对应的类名> ,当然本实例中还用到了#include<QFile>  用于文件的保存, #include <QFileDialog> 让用户自己选择保存路径。

3.直接上源码:

#include "widget.h"
#include "ui_widget.h"
#include <QtXml>
#include <QFile>
#include <QFileDialog>
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget),
    m_carId(1)
{
    ui->setupUi(this);
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::on_toolButton_clicked()
{
    QDomDocument carMessage;
    if(1 == m_carId) {
        QString strHeader( "version=\"1.0\" encoding=\"UTF-8\"" );
        carMessage.appendChild( carMessage.createProcessingInstruction("xml", strHeader) );
    }
 
    QStringList carMessageNameList;
    carMessageNameList << QString::fromUtf8("排量")
                       << QString::fromUtf8("价格")
                       << QString::fromUtf8("排放")
                       << QString::fromUtf8("油耗")
                       << QString::fromUtf8("功率");
 
    QStringList carMessageParamList;
    carMessageParamList << QString::fromUtf8("1000ml")
                        << QString::fromUtf8("10万")
                        << QString::fromUtf8("欧4")
                        << QString::fromUtf8("5(km/时)")
                        << QString::fromUtf8("74/6000");
 
    QDomElement carNode = carMessage.createElement("car");
    carNode.setAttribute("id", QString::number(m_carId));
 
    for(int i = 1; i <= 5; ++i) {
        QDomText textNode = carMessage.createTextNode(carMessageParamList.at(i - 1));
        QDomElement attribNode = carMessage.createElement("attrib");
        attribNode.setAttribute("param", carMessageNameList.at(i - 1));
        attribNode.appendChild(textNode);
        carNode.appendChild(attribNode);
        carMessage.appendChild(carNode);
    }
 
    QString fileName = QFileDialog::getSaveFileName(this, "Save", QLatin1String("./testDome"), "*.xml");
    if(!fileName.endsWith(QLatin1String("xml")))
        fileName += QLatin1String(".xml");
 
    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Append))
        return;
 
    QTextStream stream(&file);
    carMessage.save(stream, 4);
    file.close();
    ++ m_carId;
}
4.源码部分解释:
a.QDomDocument carMessage;
生成一个QT创建一些文本文件的类的对象, 如xml, world等。
 
b.	
    if(1 == m_carId) {
        QString strHeader( "version=\"1.0\" encoding=\"UTF-8\"" );
        carMessage.appendChild( carMessage.createProcessingInstruction("xml", strHeader) );
    } //这些代码是为了写xml文件头, m_carId这里是为了多次添加时, 只写一次文件头。
c. 
QStringList carMessageNameList;这里的字符串容器保存的是后面需要用上的参数和内容。
d.
QDomElement carNode; 当一个xml创建后, 是需要对应的元素的。 无论是第几级, 都是用这个类进行增加对应的item; 如下面图中的<car> , <attrib>
e.
attribNode.setAttribute
这是每一级item对应的属性的增加, 如 id="1",  param="排量"
f.
QDomText textNode用于写元素中间的内容, 如: 1000ml, 10万等。
g.
    QString fileName = QFileDialog::getSaveFileName(this, "Save", QLatin1String("./testDome"), "*.xml");
    if(!fileName.endsWith(QLatin1String("xml")))
        fileName += QLatin1String(".xml");
这里的功能是给用户手动选择一个地方保存, 并如果在未填写后缀名时, 默认加上后缀名。
h.
    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Append))
        return;
    QTextStream stream(&file);
通过文本流的方式把添加的内容写xml文件中, 
QIODevice::Append方式为可以原文件内容上继续添加, 不用清空原文件内容。

5.运行效果图:




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值