Qt读写xml文件实例
发布时间:2020-12-15 22:27:50 所属栏目:百科 来源:网络整理
导读:最近项目需要操作xml文件,将自己编写的读写xml文件函数附上。 //------------------------------------------------------------------------- //写入数据到xml文件 bool CWinSystemBackup ::WrInfoToXML( const QString sFileName) { //设置进度 m_pProgre
最近项目需要操作xml文件,将自己编写的读写xml文件函数附上。
//-------------------------------------------------------------------------
//写入数据到xml文件
bool CWinSystemBackup::WrInfoToXML(const QString &sFileName)
{
//设置进度
m_pProgressBar->setValue(5);
QDomDocument doc;
//增加xml的头格式
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version="1.0" encoding="UTF-8"");
doc.appendChild(instruction);
//增加根元素
QDomElement root = doc.createElement("Information");
doc.appendChild(root);
//--------------------IP列表----------------------
//定义IP列表子根
QDomElement IProot = doc.createElement("IPList");
root.appendChild(IProot);
//获取IP列表
QVector<QString> IPList;
g_TDeviceGroup.GetDevIpList(IPList);
for(int i = 0; i < IPList.count(); i++)
{
//增加子节点
QDomElement IPNote = doc.createElement(QString("IP%1").arg(i));
//增加子节点内容
QDomText IPNoteText = doc.createTextNode(IPList.at(i));
IPNote.appendChild(IPNoteText);
//添加子节点
IProot.appendChild(IPNote);
}
//设置进度
m_pProgressBar->setValue(10);
//---------------------------------------------------
//----------------------分辨率------------------------
//定义分辨率子根
QDomElement ResolutionRoot = doc.createElement("Resolution");
root.appendChild(ResolutionRoot);
QString text = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14").arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHdsize).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVdsize).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPFrameNum).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHpol).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVpol).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHsyn).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVsyn).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHstart).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVstart).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHend).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVend).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPHtotal).arg(
g_tDeviceInf.Nowdisplay_inf.m_nPVtotal).arg(
g_tDeviceInf.Nowdisplay_inf.m_StrnPDisName);
//增加子节点
QDomElement note = doc.createElement("resolution");
//增加子节点内容
QDomText note_text = doc.createTextNode(text);
note.appendChild(note_text);
//添加子节点
ResolutionRoot.appendChild(note);
//设置进度
m_pProgressBar->setValue(30);
//-----------------------------------------------------
//---------------------对应关系设置----------------------
//定义对应关系子根
QDomElement RelationRoot = doc.createElement("Relation");
root.appendChild(RelationRoot);
for(int i = 0; i < g_QVecUnitList.count(); i++)
{
QString text = QString("%1 %2 %3 %4 %5 %6 %7").arg(
g_QVecUnitList.at(i).m_strDevIp).arg(
g_QVecUnitList.at(i).m_StrDRouteNo).arg(
g_QVecUnitList.at(i).m_nDUnitNo).arg(
g_QVecUnitList.at(i).m_nDStartx).arg(
g_QVecUnitList.at(i).m_nDStarty).arg(
g_QVecUnitList.at(i).m_nDEndx).arg(
g_QVecUnitList.at(i).m_nDEndy);
//增加子节点
QDomElement note = doc.createElement(QString("relation%1").arg(i));
//增加子节点内容
QDomText note_text = doc.createTextNode(text);
note.appendChild(note_text);
//添加子节点
RelationRoot.appendChild(note);
}
//设置进度
m_pProgressBar->setValue(50);
//-----------------------------------------------------
//----------------------场景列表------------------------
//定义场景列表子根
QDomElement SceneListRoot = doc.createElement("SceneList");
root.appendChild(SceneListRoot);
for(int i = 0; i < g_tDeviceInf.SceneDeviceInf.count(); i++)
{
QString text = QString("%1 %2 %3 %4 %5").arg(
g_tDeviceInf.SceneDeviceInf.at(i).m_nSName).arg(
g_tDeviceInf.SceneDeviceInf.at(i).m_nSNameStr).arg(
g_tDeviceInf.SceneDeviceInf.at(i).m_nSFileStr).arg(
g_tDeviceInf.SceneDeviceInf.at(i).m_nSState).arg(
g_tDeviceInf.SceneDeviceInf.at(i).m_nSShortcut);
QDomElement note = doc.createElement(QString("scenelist%1").arg(i));
//增加子节点内容
QDomText note_text = doc.createTextNode(text);
note.appendChild(note_text);
//添加子节点
SceneListRoot.appendChild(note);
}
//设置进度
m_pProgressBar->setValue(70);
//-----------------------------------------------------
//----------------------场景信息------------------------
//定义场景信息子根
QDomElement SceneRoot = doc.createElement("SceneInformation");
root.appendChild(SceneRoot);
for(int i = 0; i < g_tDeviceInf.SceneDeviceInf.count(); i++)
{
//定义子根
QDomElement SceneChildRoot = doc.createElement(QString("SceneInfoList%1").arg(i));
SceneRoot.appendChild(SceneChildRoot);
// 加载场景信息
QString filename;
filename.sprintf("sen%05d.dat", i + 1);
QVector<TWindowParaInf> winSceneInfoList;
g_TDeviceGroup.apt_LoadSceneFromDevice(filename, winSceneInfoList, false);// false: 不替换当前场景
for(int j = 0; j < winSceneInfoList.count(); j++)
{
QString text = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11").arg(
winSceneInfoList.at(j).m_nWWinNo).arg(
winSceneInfoList.at(j).m_nWCutEnb).arg(
winSceneInfoList.at(j).m_StrWRouteNo).arg(
winSceneInfoList.at(j).m_cTWindowSiteInf.m_nSStartx).arg(
winSceneInfoList.at(j).m_cTWindowSiteInf.m_nSStarty).arg(
winSceneInfoList.at(j).m_cTWindowSiteInf.m_nSEndx).arg(
winSceneInfoList.at(j).m_cTWindowSiteInf.m_nSEndy).arg(
winSceneInfoList.at(j).m_cTCutWindowInf.m_nCStartx).arg(
winSceneInfoList.at(j).m_cTCutWindowInf.m_nCStarty).arg(
winSceneInfoList.at(j).m_cTCutWindowInf.m_nCEndx).arg(
winSceneInfoList.at(j).m_cTCutWindowInf.m_nCEndy);
QDomElement note = doc.createElement(QString("scene%1").arg(j));
//增加子节点内容
QDomText note_text = doc.createTextNode(text);
note.appendChild(note_text);
//添加子节点
SceneChildRoot.appendChild(note);
}
}
//设置进度
m_pProgressBar->setValue(90);
//-----------------------------------------------------
//删除本地文件
QFile rdfile(sFileName);
if(rdfile.open(QIODevice::ReadOnly))
{
rdfile.remove();
}
//写入数据本地新文件
QFile wrfile(sFileName);
if (!wrfile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
{
//设置进度
m_pProgressBar->setValue(0);
QMessageBox::warning(this, tr("Warning"), tr("Save File Fail !"), QMessageBox::Yes);
return false;
}
QTextStream out(&wrfile);
out.setCodec("UTF-8");
doc.save(out, 4, QDomNode::EncodingFromTextStream);
wrfile.close();
//设置进度
m_pProgressBar->setValue(100);
return true;
}
xml文件格式如下图所示:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |