ubuntu qt 生成 报表_Qt配置文件之Xml

XML(可扩展标记语言)文件本身不能对自己“做出”任何操作。它们是存储数据的一种简单方式,而存储的数据可以被其它软件轻松读取。很多程序都会使用可扩展标记语言(XML)来存储数据。XML可用来存储数据、携带数据和交换数据,不是为了显示数据而设计的。

配置文件在程序中的应用还是很常见的,如我们需要启动一个Socket 的客户端去连接远程的Server,这时需要设置服务器的Ip和Port。当我们本次设置完成后,下次再使用的时候希望程序“记录”这个Ip和Port,我们直接连接即可,而不是要求用户再输入一次。面对这种需要“记录”的功能,我们可以使用配置文件。

对于数量不多的配置信息,我们可以使用QSettings进行记录,而对于一些复杂而且数量较多的配置信息,我们则可以使用配置文件。如Xml配置文件、Json配置文件等。

程序平台:ubuntu、 Qt 5.5.1

程序配置文件的主体功能:构造一个配置信息的结构体ConfigInfo,用于存储需要记录的信息,在点击Save按钮时写入配置文件,在构造函数中读取配置信息。当我们下次再运行程序时,读取配置文件后,将我们上次保存的信息显示到UI界面上。该Demo是用来记录Ip和Port的。

ubuntu qt 生成 报表_Qt配置文件之Xml_第1张图片
  1. 写Xml文件函数

①生成Xml文件

void Widget::writeXmlConfig(const QString &fileName, ConfigInfo &configInfo)

{

QDomDocument doc;

QDomProcessingInstructioninstruction= doc.createProcessingInstruction("xml","version="1.0"encoding="UTF-8"");

doc.appendChild(instruction);

QDomElement root = doc.createElement("Config");//创建根节点

doc.appendChild(root); //添加根节点

//ip

QDomElement strIP = doc.createElement("Ip");

root.appendChild(strIP); //添加元素节点到根节点

QDomText strIpText = doc.createTextNode(configInfo.ip);

strIP.appendChild(strIpText); //添加元素文本到元素节点

//port

QDomElement strPort = doc.createElement("Port");

root.appendChild(strPort); //添加元素节点到根节点

QDomText strPortText = doc.createTextNode(QString::number(configInfo.port));

strPort.appendChild(strPortText); //添加元素文本到元素节点

saveXmlConfig(fileName, doc);

}

②写入完成后保存到文件中:

void Widget::saveXmlConfig(const QString &fileName, QDomDocument &doc)

{

QDir m_dir("./testXmlConfig");

if(!m_dir.exists())

{

system("mkdir ./testXmlConfig");

}

QFile file(m_dir.absolutePath() + "/" + fileName);

if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))

{

return;

}

QTextStream out(&file);

out.setCodec("UTF-8");

doc.save(out, 4, QDomNode::EncodingFromTextStream);

file.close();

}

  1. 读取Xml文件

①读取Xml文件

void Widget::readXmlConfig(const QString &fileName, ConfigInfo &configInfo)

{

QFile file(fileName);

if(file.open(QIODevice::ReadOnly))

{

QDomDocument doc("testConfig");

if(doc.setContent(&file))

{

QDomElement root = doc.documentElement();

listDom(root,configInfo);

}

file.close();

}

}

②遍历存储的节点

void Widget::listDom(QDomElement &docElem,

ConfigInfo &configInfo)

{

QDomNode node = docElem.firstChild();

if(node.toElement().isNull())

{

return;

}

while(!node.isNull())

{

QDomElement element = node.toElement();

if(element.tagName() == "Ip")

{

configInfo.ip = element.text();

qDebug() << "test ip" << configInfo.ip;

}

if(element.tagName() == "Port")

{

configInfo.port = element.text().toInt();

qDebug() << "test port" << configInfo.port;

}

node = node.nextSibling();

}

}

以后有机会可以和大家介绍下读取Xml文件后将他们显示到Qt的TreeWidget上。

公众号 Pou光明

公众号后台留言可获取完整工程

你可能感兴趣的:(ubuntu,qt,生成,报表)