XML文件路径:D:\Test\qt\xml\test.xml内容:
- <?xmlversion="1.0"encoding="GBK"?>
- <Root>
- <TestAttr="属性">金财税</Test>
- </Root>
1、新建一个Qt工程,命名为xml。
2、在xml.pro文件加入一句 Qt += xml
3、在界面上放一个PushButton和一个TextEdit
main.cpp
- #include<QtGui/QApplication>
- #include"mainwindow.h"
- //为了正常显示中文,手动加入以下引用
- #include<QTextCodec>
- intmain(intargc,char*argv[])
- {
- QApplicationa(argc,argv);
- //手动加入以下代码,保证中文可以正常显示
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
- MainWindoww;
- w.show();
- returna.exec();
- }
在PushButton的clicked()槽中写读取xml的代码
mainwindow.cpp
- #include"mainwindow.h"
- #include"ui_mainwindow.h"
- //以下是手工添加的引用
- #include<QDomDocument>
- #include<QDomElement>
- #include<QDomAttr>
- #include<QFile>
- MainWindow::MainWindow(QWidget*parent):
- QMainWindow(parent),
- ui(newUi::MainWindow)
- {
- ui->setupUi(this);
- }
- MainWindow::~MainWindow()
- {
- deleteui;
- }
- voidMainWindow::on_pushButton_clicked()
- {
- QFilefile("D:/Test/qt/xml/test.xml");
- if(!file.open(QFile::ReadOnly|QFile::Text))
- {
- ui->textEdit->append(tr("XML文件打开失败"));
- }
- QDomDocumentdoc;
- QStringerrStr;
- interrLine,errCol;
- //setContent是将指定的内容指定给QDomDocument解析,第一参数可以是QByteArray或者是文件名等。
- if(!doc.setContent(&file,false,&errStr,&errLine,&errCol))
- {
- ui->textEdit->append(tr("指定XML内容失败原因:")+errStr);
- }
- file.close();
- //根节点
- QDomElementroot=doc.documentElement();
- ui->textEdit->append(root.nodeName());///输出根节点名称输出Root
- QDomElementchild=root.firstChildElement();
- ui->textEdit->append(child.nodeName());//输出内容:Test
- ui->textEdit->append(child.text());//child.nodeValue()无值,原因不明输出内容:金财税
- ui->textEdit->append(child.attributeNode("Attr").nodeName());//输出内容:Attr
- ui->textEdit->append(child.attributeNode("Attr").nodeValue());//输出内容:属性
- }
运行结果:
在上一节的工程中加入一个按钮,在按钮的clicked()槽中加入以下代码:
- voidMainWindow::on_pushButton_2_clicked()
- {
- QFilefile("C:/new.xml");
- if(!file.open(QFile::WriteOnly|QFile::Text))
- {
- ui->textEdit->append(tr("文件打开失败"));
- }
- doc.appendChild(doc.createProcessingInstruction("xml","version=\"1.0\"encoding=\"GBK\""));
- //根节点
- QDomElementroot=doc.createElement("Root");
- doc.appendChild(root);
- //子节点
- QDomElementchild=doc.createElement("Test");
- QDomTexttext=doc.createTextNode(tr("金财税"));//child.setNodeValue(tr("金财税"))的方法无效果,原因不明
- child.appendChild(text);
- child.setAttribute("Attr","属性");
- root.appendChild(child);
- //输入XML文件
- QTextStreamout(&file);
- doc.save(out,4);//这里的4暂时不知道是什么意思
- file.close();
- }
还需要在源文件头部加入引用:
- #include<QTextStream>
如果执行成功,会在C盘里找到new.xml文件,文件内容如下:
- <?xmlversion="1.0"encoding="GBK"?>
- </Root>
本文出自 “自由自我” 博客,请务必保留此出处http://www.jb51.cc/article/p-aqqehpit-ev.html