在 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 c++中获取Json数组中Qstring的输出

获取 QString 时出现分段错误

QT中QString 类的使用--获取指定字符位置截取子字符串等

QT中QString 类的使用--获取指定字符位置截取子字符串等

QT中关于QString用法