2013-04-13 127 views
0

這很混亂。我的程序工作可靠。然後,我匆匆做了一些改變,他們沒有工作,重新纏繞他們,去顯示我的程序,它不再有效。我的錯誤是每10分鐘不做新的複印件。然而事情是,該程序崩潰在一個沒有道理的地方。QDomElement.setAttribute崩潰程序

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。

然後

0x77d3016e在TestBuild.exe:00000000:操作成功完成。

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

溶液Qt文檔中。

看看我如何創建新元素,我通過調用QDomDocument d("EzXpns");這是一個錯誤。在Qt中,QDomDocument被銷燬後,所有的孩子都沒有。它僅僅因爲純粹的運氣才奏效。創建一個QDomDocument,然後傳遞它,解決了我的問題。