2014-02-23 69 views
0
引用的元素

有含QSharedPointer Note類的元素命名m_noteList一個的QList成員變量。訪問中的QList和QSharedPointer

如果創建了一個新的註釋,其參考附加到列表:

void Traymenu::newNote(){ 
    QSharedPointer<Note> note(new Note(this)); 
    m_noteList << note; 
} 

每個音符元素,偉馳指針在m_noteList,我想它的標題,並將其添加到我的contextmenu。目的是爲了點擊該標題打開注:

for (int i = 0 ; i < m_noteList.count() ; i++) { 
    std::string menuEntryName = m_noteList[i].getTitle(); 
    QAction *openNote = m_mainContextMenu.addAction(menuEntryName); 
} 

我得到一個錯誤

C:\project\traymenu.cpp:43: Fehler: 'class QSharedPointer<Note>' has no member named 'getTitle' 
    std::string menuEntryName = &m_noteList[i].getTitle(); 
               ^

基本上我想獲得那些在m_noteList引用的對象。我怎麼做?我認爲用m_noteList[i]來訪問該元素,但顯然編譯器期望QSharedPointer類型的東西。爲什麼?

+0

釷e錯誤表示'QSharedPointer'沒有getTitle方法。確實如此。你應該取消引用你的指針來訪問'Note'類的成員:'m_noteList [i] .data() - > getTitle();' – Kiwi

+0

啊,所以這是它的方式。謝謝,你會發表一個答案嗎? – user2366975

回答

1

QSharedPointer基本上包裹你的指針。所以你不能直接訪問'。'運算符,這就是爲什麼出現此錯誤的原因:getTitle不是類QSharedPointer的一部分。

但是你有多種方式來獲取真正的指針:

  1. data:沒有最簡單的方式,但它是明確的,而且有時候重要
  2. operator->:所以你可以用你的QSharedPointer像一個實際的指針m_noteList[i]->getTitle();
  3. operator*:像做(*m_noteList[i]).getTitle();