QT 中QDomDocument::setContent问题请教
QString xmlPath="E:\\12.xml";
QFile file(xmlPath);
if (!file.open(QIODevice::ReadOnly| QIODevice::Text))
{
//return 0;
}
QDomDocument doc;
QString errorStr;
int errorLine, errorCol;
if (!doc.setContent(&file, false, &errorStr, &errorLine, &errorCol))//此句会出错
{
file.close();
}
问题是:程序中如果有doc.setContent(&file, false, &errorStr, &errorLine, &errorCol)这句,那么在doc生命周期结束时就会出错,Windows 已在 bbb.exe 中触发一个断点。其原因可能是堆被损坏,这说明 .exe 中或它所加载的任何 DLL 中有 Bug。请问是为什么?
------解决方案--------------------
加上QApplication app(argc, argv);return app.exec();
你的程序并没有结束,所以doc也没有销毁
------解决方案--------------------
QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
return;
if (!doc.setContent(&file)) {
file.close();
return;
}
file.close();
// print out the element names of all elements that are direct children
// of the outermost element.
QDomElement docElem = doc.documentElement();
QDomNode n = docElem.firstChild();
while(!n.isNull()) {
QDomElement e = n.toElement(); // try to convert the node to an element.
if(!e.isNull()) {
cout <
}
n = n.nextSibling();
}
// Here we append a new element to the end of the document
QDomElement elem = doc.createElement("img");
elem.setAttribute("src", "myimage.png");
docElem.appendChild(elem);
这是官方例子,你看看你跟它有啥区别,我其实也不太清楚你的问题,不过我打开文档没有加Text那个flag