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;
            }
        }
    }
  • 相关阅读:
    CentOS 6.5 编译安装Apache2.4
    Linux 服务器安全优化
    yum安装Apache2.4
    HDU 3308 线段树求区间最长连续上升子序列长度
    HDU 3607 线段树+DP+离散化
    POJ 3667 线段树区间合并裸题
    HDU 5726 线段树+dp
    牛客网多校训练第二场D Kth Minimum Clique
    HDU 4325 离散化+树状数组 或者 不使用树状数组
    HDU 2167 状压dp方格取数
  • 原文地址:https://www.cnblogs.com/grandyang/p/5554880.html
Copyright © 2011-2022 走看看