Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Qt中使用XML StreamReader?_C++_Xml_Qt_Streamreader - Fatal编程技术网

C++ 如何在Qt中使用XML StreamReader?

C++ 如何在Qt中使用XML StreamReader?,c++,xml,qt,streamreader,C++,Xml,Qt,Streamreader,我有这个XML 位于C:/project/setting.xml中 <?xml version='1.0'?> <configs> <interval>10</interval> <size>176,144</size> </configs> 10 176,144 如何链接到我的QT项目 以及如何在我的.cpp文件中调用我的XML的间隔和大小值 谢谢。我通常更喜欢直接使用DOM文档进行阅读,而只使用

我有这个XML 位于C:/project/setting.xml中

<?xml version='1.0'?>
<configs>
  <interval>10</interval>
  <size>176,144</size>
</configs>

10
176,144
如何链接到我的QT项目

以及如何在我的.cpp文件中调用我的XML的间隔和大小值


谢谢。

我通常更喜欢直接使用DOM文档进行阅读,而只使用拖缆进行书写(
QXmlStreamWriter
)。使用<代码> QXmlStreamReader <代码>是非常费力的,因为为了最大的健壮性,你必须考虑到读者当前位置的所有可能性。如果你不介意改变阅读方法,你可以看看这个答案

Qt已经提供了如何使用DOM文档的详细说明,但是这里有一个针对当前问题的简化版本。只需将XML模块添加到Qt项目中

#include <QtXML>

bool readXML(const QString& path)
{
  try {
    QFile inFile(path);
    if (!inFile.open(QFile::ReadOnly)) return false;

    QDomDocument xml("xml");
    xml.setContent(inFile.readAll());

    auto configs = xml.documentElement();
    if (configs.tagName() != "configs") return false;

    // No error checking nor other type conversion done here
    qDebug() << configs.firstChildElement("interval").firstChild().nodeValue();
    qDebug() << configs.firstChildElement("size").firstChild().nodeValue();
  } catch (...) {
    return false;
  }

  return true;
}
可以使用该方法获取下一个元素:

for (auto interval = configs.firstChildElement("interval");
     !interval.isNull();
     interval= interval.nextSiblingElement("interval")) {
  // ...
}

您看过了吗?值得一提的是,Qt不再推荐使用QtXML。正如“该模块不再进行主动维护。请改用Qt Core中的QXmlStreamReader和QXmlStreamWriter类。”有趣的是,我不知道,这很遗憾。谢谢@MrEricSir指出这一点!
auto interval = configs.firstChildElement("interval");
qDebug() << interval.firstChild().nodeValue();
<?xml version='1.0'?>
<configs>
  <interval>10</interval>
  <interval>100</interval>
  <interval>1000</interval>
  <size>176,144</size>
</configs>
for (auto interval = configs.firstChildElement("interval");
     !interval.isNull();
     interval= interval.nextSiblingElement("interval")) {
  // ...
}