0

0

Qt框架怎么读写XML文件_Qt框架QXmlStreamReader/Writer使用教程

煙雲

煙雲

发布时间:2025-11-06 19:27:28

|

573人浏览过

|

来源于php中文网

原创

Qt推荐使用QXmlStreamReader和QXmlStreamWriter处理XML文件。1. QXmlStreamReader以流式方式逐节点解析,内存占用低,适合大文件;通过readNext()读取token,结合isStartElement()、isEndElement()等判断节点类型,可灵活提取数据。2. QXmlStreamWriter提供writeStartElement()、writeAttribute()等方法生成格式化XML,调用setAutoFormatting(true)提升可读性,自动处理编码与转义。3. 使用时需检查文件打开状态,读取后验证hasError(),写入注意层级匹配;相比DOM方式更高效省资源,适用于复杂或大型XML场景。

qt框架怎么读写xml文件_qt框架qxmlstreamreader/writer使用教程

Qt 框架提供了多种方式读写 XML 文件,其中 QXmlStreamReaderQXmlStreamWriter 是最常用且推荐的方式。它们基于流式处理,内存占用低、效率高,适合处理大文件或结构复杂的 XML 数据。

1. 使用 QXmlStreamReader 读取 XML 文件

QXmlStreamReader 以逐节点的方式解析 XML,支持跳过未知内容,适用于灵活的解析场景。

基本使用步骤:

  • 创建 QFile 并打开 XML 文件
  • 将文件传入 QXmlStreamReader
  • 循环读取 token(标签、文本、属性等)
  • 根据 token 类型进行相应处理
示例代码:读取一个简单的配置文件
#include 
#include 
#include 

void readXml(const QString &fileName)
{
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly))
        return;

    QXmlStreamReader reader(&file);
    while (!reader.atEnd()) {
        reader.readNext();

        if (reader.isStartElement()) {
            if (reader.name() == "setting") {
                QXmlStreamAttributes attrs = reader.attributes();
                if (attrs.hasAttribute("name") && attrs.hasAttribute("value")) {
                    std::cout << "Name: " 
                              << attrs.value("name").toString().toStdString()
                              << ", Value: "
                              << attrs.value("value").toString().toStdString()
                              << std::endl;
                }
            }
        }
    }

    if (reader.hasError()) {
        std::cerr << "Error: " << reader.errorString().toStdString().c_str();
    }

    file.close();
}

常见判断方法:

  • isStartElement():是否是开始标签
  • isEndElement():是否是结束标签
  • isCharacters():是否是文本内容(注意过滤空白)
  • isComment():是否是注释

2. 使用 QXmlStreamWriter 写入 XML 文件

QXmlStreamWriter 提供简洁 API 来生成格式良好的 XML 文件,自动处理转义和编码

SPLASH
SPLASH

将音乐制作的乐趣带给每个人。

下载

基本流程:

  • 打开 QFile 或其他 QIODevice
  • 创建 QXmlStreamWriter 实例
  • 设置输出选项(如自动换行)
  • 使用 writeStartElement、writeAttribute、writeCharacters 等写入内容
示例代码:生成一个 settings.xml
#include 
#include 

void writeXml(const QString &fileName)
{
    QFile file(fileName);
    if (!file.open(QIODevice::WriteOnly))
        return;

    QXmlStreamWriter writer(&file);
    writer.setAutoFormatting(true); // 启用格式化输出
    writer.writeStartDocument();
    writer.writeStartElement("config");
    
    writer.writeStartElement("setting");
    writer.writeAttribute("name", "volume");
    writer.writeAttribute("value", "80");
    writer.writeEndElement(); // setting

    writer.writeStartElement("setting");
    writer.writeAttribute("name", "fullscreen");
    writer.writeAttribute("value", "true");
    writer.writeEndElement(); // setting

    writer.writeEndElement(); // config
    writer.writeEndDocument();

    file.close();
}

关键方法说明:

  • writeStartDocument():写入 XML 声明(如
  • writeStartElement(tag):开始一个标签
  • writeAttribute(name, value):添加属性
  • writeCharacters(text):写入标签内的文本
  • writeEndElement():关闭当前标签
  • writeEndDocument():完成文档

3. 注意事项与技巧

使用这两个类时需要注意以下几点:

  • 始终检查文件是否成功打开
  • 读取时建议用 !reader.atEnd() 控制循环,避免无限循环
  • 写入时开启 setAutoFormatting(true) 可提高可读性
  • QXmlStreamReader 不会报错所有异常,需调用 hasError() 明确判断
  • 中文等非 ASCII 字符在 QFile 中默认使用 UTF-8,无需额外设置编码

对于嵌套结构,可以结合或状态变量跟踪层级;对于大型文件,流式处理比 DOM 方式(如 QDomDocument)更节省内存。

基本上就这些。掌握 QXmlStreamReader 和 QXmlStreamWriter 后,就能高效处理大多数 XML 场景了。

相关专题

更多
视频后缀名都有哪些
视频后缀名都有哪些

视频后缀名都有avi、mpg、mpeg、rm、rmvb、flv、wmv、mov、mkv、ASF、M1V、M2V、MPE、QT、VOB、RA、RMJ、RMS、RAM、等等。更多关于视频后缀名的相关知识,详情请看本专题下面的文章,php中文网欢迎大家前来学习。

3314

2023.10.31

C++ Qt图形开发
C++ Qt图形开发

本专题专注于 C++ Qt框架在图形界面开发中的应用,系统讲解窗口设计、信号与槽机制、界面布局、事件处理、数据库连接与跨平台打包等核心技能,通过多个桌面应用项目实战,帮助学员快速掌握 Qt 框架并独立完成跨平台GUI软件的开发。

67

2025.08.15

C++ 图形界面开发基础(Qt方向)
C++ 图形界面开发基础(Qt方向)

本专题系统讲解 使用 C++ 与 Qt 进行图形界面(GUI)开发的核心技能,内容涵盖 Qt 项目结构、窗口组件、信号与槽机制、事件处理、布局管理、资源管理,以及跨平台编译与打包流程。通过多个小型桌面应用实战案例,帮助学习者掌握从界面设计到功能实现的完整 GUI 开发能力。

35

2025.12.05

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1842

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2079

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

914

2024.11.28

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6028

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

778

2023.09.14

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 2.4万人学习

React 教程
React 教程

共58课时 | 3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号