zoukankan      html  css  js  c++  java
  • Qt Write and Read XML File 读写XML文件

    在Qt中,我们有时候需要把一些参数写入xml文件,方便以后可以读入,类似一种存档读档的操作,例如,我们想生成如下的xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <Parameters>
        <para1>1</para1>
        <para2>2</para2>
        <para3>3</para3>
    </Parameters>

    那么写入的操作请参见如下代码:

    void QtMainWindow::on_actionSave_triggered() {
        QString filename = QFileDialog::getSaveFileName(this,
            tr("Save Xml"), ".",
            tr("Xml files (*.xml)"));
        QFile file(filename);
        file.open(QIODevice::WriteOnly);
        QXmlStreamWriter xmlWriter(&file);
        xmlWriter.setAutoFormatting(true);
        xmlWriter.writeStartDocument();
        xmlWriter.writeStartElement("Parameters");
        xmlWriter.writeTextElement("para1",QString::number(1));
        xmlWriter.writeTextElement("para2",QString::number(2));
        xmlWriter.writeTextElement("para3",QString::number(3));
        xmlWriter.writeEndElement();
        xmlWriter.writeEndDocument();
        file.close();
    }

    读入的操作请参见如下:

    void QtMainWindow::on_actionLoad_triggered() {
        QString filename = QFileDialog::getOpenFileName(this,
            tr("Open Xml"), ".",
            tr("Xml files (*.xml)"));
        QFile file(filename);
        if (!file.open(QFile::ReadOnly | QFile::Text)) {
            std::cerr << "Error: Cannot read file " << qPrintable(filename)
                << ": " << qPrintable(file.errorString())
                << std::endl;
        }
        QXmlStreamReader xmlReader(&file);
        xmlReader.readNext();
        while(!xmlReader.atEnd()) {
            if(xmlReader.isStartElement()) {
                if(xmlReader.name() == "Parameters") {
                    xmlReader.readNext();
                } else if (xmlReader.name() == "para1") {
                    int para1 = xmlReader.readElementText().toInt();
                    xmlReader.readNext();
                } else if (xmlReader.name() == "preFilterCap") {
                    int para2 = xmlReader.readElementText().toInt();
                    xmlReader.readNext();
                } else if (xmlReader.name() == "SADWindowSize") {
                    int para3 = xmlReader.readElementText().toInt();
                    xmlReader.readNext();
                } else {
                    xmlReader.raiseError(QObject::tr("Not a options file"));
                }
            } else {
                xmlReader.readNext();
            }
            file.close();
            if (xmlReader.hasError()) {
                std::cerr << "Error: Failed to parse file "
                    << qPrintable(filename) << ": "
                    << qPrintable(xmlReader.errorString()) << std::endl;
            } else if (file.error() != QFile::NoError) {
                std::cerr << "Error: Cannot read file " << qPrintable(filename)
                    << ": " << qPrintable(file.errorString())
                    << std::endl;
            }
        }
    }
  • 相关阅读:
    jfixed使固定行列可编辑表格
    Base 64 加密、解密
    去除富文本格式
    阿里移动安全挑战赛第二题研究小结
    CyanogenMod源码下载、编译、刷机过程记录(HTC buzz)
    编译民间安卓源码mokesoures4.2.2报错内容【解决了!】
    Linux下通过NDK的初步使用【详细步骤+截图】
    Linux下实现JNI期间发生的错误……【未解决】
    C++调用Java方法时jvm.dll相关错误 【每次记录完后都被瞬间解决了……】
    JNI学习中——JVM错误:EXCEPTION_ACCESS_VIOLATION (0xc0000005)
  • 原文地址:https://www.cnblogs.com/grandyang/p/5554880.html
Copyright © 2011-2022 走看看