在 QString 中获取 QDomElement 值时出错
Posted
技术标签:
【中文标题】在 QString 中获取 QDomElement 值时出错【英文标题】:Error when getting QDomElement value in a QString 【发布时间】:2015-12-08 17:44:50 【问题描述】:我有这个 C++ 代码,我尝试通过 QDomDocument api 从 XML 文件中获取值:
...
QFile xml_file("file.xml");
QDomDocument qdom_document;
maps_qdom_document.setContent(&maps_xml_file);
QDomNodeList maps = qdom_document.elementsByTagName("map");
QDomNode n = maps.item(0);
QDomElement markers_list = n.firstChildElement("markers_list");
QDomNodeList markers = markers_list.elementsByTagName("marker");
QDomNode marker;
int _id;
QString value1;
for (int i = 0; i < markers.size(); i++)
marker = markers.item(i);
// APPLICATION STOPS AT THE LINE BELOW
value1 = marker.firstChildElement("id").text(); //!!!ERROR DETECTED HERE
_id = value1.toInt();
...
测试它定义的值 value1 并包含我想要的值(我将其转换为 std::string 并读取它)
Error Detected when getting value1
这是程序在描述的行停止时的调用堆栈:
Call Stack on the error
这是 natvis 的输出:
Natvis: C:\USERS\USER\APPDATA\LOCAL\MICROSOFT\VISUALSTUDIO\14.0\EXTENSIONS\BFMZ1AIF.2DM\natvis\qt5.natvis(200,25): Error: class "QString::Data" has no member "offset"
Error while evaluating '((reinterpret_cast<unsigned short*>(d)) + d->offset / 2),sub' in the context of type 'main.exe!QString'.
我使用 Visual Studio 2015 和编译器 vsc10(Visual Studio 2010 的)。我使用最适合 Qt 5 的 QT VS Addin,但我使用 Qt4.8 库对其进行配置。
我在网上搜索,发现是内存问题(删除一个已删除的变量或类似的东西)但我没有找到正确的解决方案。
【问题讨论】:
【参考方案1】:我发现了这种行为的问题。这是因为 Qt VS Addin 的版本只支持 Qt5 或更高版本。由于我的项目与 Qt 4.8 链接,它会产生一些像这样的错误。将我的 Qt 版本升级到 5.5 后,这个问题就消失了。
【讨论】:
以上是关于在 QString 中获取 QDomElement 值时出错的主要内容,如果未能解决你的问题,请参考以下文章
QDomElement.setAttribute 使程序崩溃
QT中QString 类的使用--获取指定字符位置截取子字符串等