2014-05-04 17 views
0

如何獲得指向QDomDocument中的具體QDomNode的指針?指向QDomDocument中的QDomNode的指針

void MainWindow::traverseNode(const QDomNode& node,int &objectCounter) 
{ 
    QDomNode domNode = node.firstChild(); 
    while(!domNode.isNull()) { 
     if(domNode.isElement()) { 
      QDomElement domElement = domNode.toElement(); 
      if(!domElement.isNull()) { 
       domElement.setAttribute("id",QString::number(objectCounter)); 
       ++objectCounter; 
       //and save pointer to this element somewhere 
      } 
     } 
     traverseNode(domNode,objectCounter); 
     domNode = domNode.nextSibling(); 
    } 
} 

回答

0

只需使用&domNode作爲一個指向具體QDomNode。查看文檔,這很可能會產生所需的效果(問題中未詳細說明):

更改返回的節點也會更改文檔樹中的節點。

+0

但是我怎樣才能在功能之外使用這個「指針」呢? QDomNode domNode - 本地對象和它將被銷燬的函數外部。或者我錯了? (對不起,我的英語,我希望你明白我的問題) –

0

你可以做這樣的事情:

domNode = domNode.nextSibling(); 
m_currentDomNotePointer = &domNode; // You could also use a pointer vector. 

,那麼你就可以在這樣的另一種方法來使用這個m_currentDomNotePointer

MyClass::anotherMethod() 
{ 
    // use m_currentDomNotePointer 
} 

但是,這一切似乎因爲有點徒勞你可以保存const QDomNode& node並重復使用,就像這個方法一樣。我不明白爲什麼你想避免這種情況,除非你只有一個或幾個特定的​​「容器」元素。

+0

我有我自己的類「mySvgItem」字段「QDomNode節點」和每個項目我想存儲它的節點有快速訪問任何屬性。 –

+0

但是,如果我嘗試做這樣的事情: –

+0

創建'QVector測試'併爲每個節點'test.push_back(&domNode)'作爲結果,我會得到'QVector'與一些錯誤的鏈接。 –