zoukankan      html  css  js  c++  java
  • Qt-QML-C++交互实现文件IO系统-后继-读取XML文件和创建XML文件

    在前面两篇中,大致完成了一个文件IO的读和写操作。前面两篇文章链接

    http://blog.csdn.net/z609932088/article/details/71488250

    http://blog.csdn.net/z609932088/article/details/71598414

    今天这个是,今天主要是写了怎么把配置文件写入到XML中

    上今天的详代码

    QJsonObject DLFileIOSystem::DLReadXML()
    {
        qDebug()<<"XML 读取函数执行";
    
        QFile file("./config.xml");         //打开XMl文件
        if(!file.open(QFile::ReadOnly | QFile::Text))
        {
            QMessageBox::information(NULL,"Title","Open File False");       //如果打开失败则提示
        }
        QDomDocument doc;               //把文件内容写入到doc中
        doc.setContent(&file);
        file.close();               //关闭文件
    
        QDomElement root = doc.documentElement();
    
        QDomNode node = root.firstChild();
        while (!node.isNull())
        {
            QDomElement element = node.toElement();
            if(!element.isNull())
            {
                QDomNamedNodeMap list = element.attributes();
                for(int i = 0; i<list.count(); i++)
                {
                    xmlDate.insert(list.item(i).nodeName(),list.item(i).nodeValue());
                    qDebug()<<list.item(i).nodeName();
                }
            }
            node = node.nextSibling();
        }
    
    
    
    
    
    
    
    
    
        return xmlDate;
    }
    
    bool DLFileIOSystem::DJWriteXML()
    {
        qDebug()<<"XML 读取函数执行";
    
    
    
    
        QFile file("./config.xml");         //打开XMl文件
        if(!file.open(QFile::ReadWrite | QFile::Text | QFile::Truncate))            //这里需要注意的是,写入文件的时候需要以覆盖的方式
        {
            QMessageBox::information(NULL,"Title","Open File False");       //如果打开失败则提示
        }
    
        QTextStream out(&file);
        QTextCodec *codec = QTextCodec::codecForName("gbk");
        out.setCodec(codec);
        QDomDocument doc;               //把文件内容写入到doc中
        doc.setContent(&file);
        QDomElement root = doc.createElement("Root");
        QDomElement date = doc.createElement("XMLDate");
    
        QStringList list = xmlDate.keys();
        for(int i = 0; i<list.count(); i++)
        {
            date.setAttribute(list.at(i),xmlDate.value(list.at(i)).toString());
        }
    
        root.appendChild(date);
        QString strHead("version = "1.0" encoding = "GB2312"");
        doc.appendChild(doc.createProcessingInstruction("xml",strHead));
        out<<doc.toString();
        root.save(out,2);
        file.close();               //关闭文件
        QMessageBox::warning(NULL,"提示","文件写入完成");
        return true;
    }

    一个读文件,一个写文件

    这里要参考以为牛逼大大的文章

    http://blog.csdn.net/sbisyju/article/details/8701561#comments

    剩下的就不用在说了,看到前面

    这里还有一个问题了就是,前几天没有弄出来的一点,这里要说明一下,

    
    
    //    property JSON date : FileIOSystem.DLReadFile()
    
    //    property QJSON name: value
    
        property var xmljson: FileIOSystem.DLReadXML()


    只有最后一种方式是正确的,把C++传来的QJsonObject定义成一个json属性

    完了就可以在后面的内容中愉快的使用了


    代码结构

  • 相关阅读:
    「JXOI2018」游戏
    「CTSC2018」假面
    CodeForces
    CodeForces
    [Lydsy1710月赛] 小B的数字
    OpenJ_Bailian
    [SDOI2010] 地精部落
    CodeForces
    CodeForces
    [NOI2009] 管道取珠
  • 原文地址:https://www.cnblogs.com/DreamDog/p/9160022.html
Copyright © 2011-2022 走看看