令人困惑。我的计划工作可靠。然后,我匆忙做了一些改变,他们没有工作,重新缠绕他们,去展示我的程序,它不再有效。我没有每隔10分钟制作新副本。然而,问题是,程序在一个毫无意义的地方崩溃。
QDomElement Expense::toNode()
{
QDomElement e=Entry::toNode(); //Entry is parent of Expense
QString temp;
//std::string getThis=e.nodeName().toStdString();
temp=QString::fromStdString(Category); //Category is string field
//e.hasAttribute("category"); //this works
//e.setAttribute("ha","hi"); //this crashes program
//e.setAttribute("category",temp); //this also crashes program
return e;
}
我认为可能很急,我修改了一些库,但是如果我创建一个新的QDomElement
,并编辑它的属性,则根本没有问题。然后我想也许我的节点根本不是节点,但我可以使用许多其他功能(例如e.hasAttribute
)。我们可以设置的属性数量是否有限制?可能是什么错误?
如果有帮助:
QDomElement Entry::toNode()
{
QDomDocument d("EzXpns");
QDomElement e=d.createElement("entry");
QString temp;
temp=QString::fromStdString(Name);
e.setAttribute("name",temp);
temp=QString::fromStdString(to_string(static_cast<long double>(Amount)));
e.setAttribute("amount",temp);
temp=QString::fromStdString(to_string(static_cast<long long>(Date[0])));
e.setAttribute("dateyear",temp);
temp=QString::fromStdString(to_string(static_cast<long long>(Date[1])));
e.setAttribute("datemonth",temp);
temp=QString::fromStdString(to_string(static_cast<long long>(Date[2])));
e.setAttribute("dateday",temp);
temp=QString::fromStdString(Comment);
e.setAttribute("comment",temp);
return e;
}
编辑:我应该指定,如果我尝试调试这是我收到的消息:
TestBuild.exe已触发断点
然后
TestBuild.exe中0x77d415de处的未处理异常:0xC0000005:访问冲突读取位置0x13fb8ff8。
然后
TestBuild.exe中的0x77d3016e:0x00000000:操作成功完成。
Edit2:示例xml
<!DOCTYPE data>
<EzXpns>
<account>
<login name="b" password="1"/>
<expHis>
<entry comment="9" dateday="1" name="k" dateyear="0" amount="9" datemonth="1"/>
<entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
<entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
<entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
<entry comment="9" dateday="1" name="b" dateyear="0" amount="9" datemonth="1"/>
</expHis>
<incomeHis/>
</account>
</EzXpns>
答案 0 :(得分:0)
解决方案属于Qt文档。
看看我是如何创建新元素的,我是通过调用QDomDocument d("EzXpns");
来实现的,这是一个错误。在Qt中,在QDomDocument
被摧毁之后,所有的儿童节点都是如此。之前因为纯粹的运气而奏效。创建一个QDomDocument
,然后传递它,解决了我的问题。