QT 中QDomDocument::setContent问题请教

wtw2338228 2012-12-11 05:20:40
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。请问是为什么?
...全文
1657 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2015-03-16
  • 打赏
  • 举报
回复
引用 8 楼 l64276 的回复:
我在使用QT的QDomDocument::setContent时也遇到同样的问题,尝试了网上说的一些办法也解决不了,最后检查加载的库,发现我在Debug下使用了Release的Qt5Xml.lib库,导致了这个问题,把Debug环境下链接的库改为Qt5Xmld.lib就OK了。供大家参考一下,谢谢
我的是debug库,但还是有问题,貌似是文件结尾不对
l64276 2014-09-07
  • 打赏
  • 举报
回复
我在使用QT的QDomDocument::setContent时也遇到同样的问题,尝试了网上说的一些办法也解决不了,最后检查加载的库,发现我在Debug下使用了Release的Qt5Xml.lib库,导致了这个问题,把Debug环境下链接的库改为Qt5Xmld.lib就OK了。供大家参考一下,谢谢
  • 打赏
  • 举报
回复
我也遇到同样的问题,如何解决啊?按上面的方法没解决掉啊?
wtw2338228 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 foxyz 的回复:
C/C++ code?123456789101112131415161718192021222324252627QDomDocument doc("mydocument"); QFile file("mydocument.xml"); if (!file.open(QIODevice::ReadOnly)) return; if (!doc.setContent(……
官方程序我运行还是出错,郁闷了
wtw2338228 2012-12-12
  • 打赏
  • 举报
回复
经过反复修改代码终于让程序通过了,我的方法是 file.open(QIODevice::ReadOnly|QIODevice::Unbuffered),即绕过缓存区打开文件,有人能分析下原因吗?难道是我电脑的问题?
donwmufromdying 2012-12-11
  • 打赏
  • 举报
回复
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 << qPrintable(e.tagName()) << endl; // the node really is an element.
     }
     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
wtw2338228 2012-12-11
  • 打赏
  • 举报
回复
引用 2 楼 heksn 的回复:
加上QApplication app(argc, argv);return app.exec(); 你的程序并没有结束,所以doc也没有销毁
那问题出在哪儿呢?是否要销毁doc?该如何销毁
  • 打赏
  • 举报
回复
加上QApplication app(argc, argv);return app.exec(); 你的程序并没有结束,所以doc也没有销毁
wtw2338228 2012-12-11
  • 打赏
  • 举报
回复
加上
QApplication app(argc, argv);return app.exec();
这两句就没问题了,何解啊

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧