0

有一个名为 QList 的成员变量m_noteList,其中包含 class 的 QSharedPointer 元素Note

private: 
   QList< QSharedPointer<Note> > m_noteList; 

如果创建了新注释,则其引用将附加到列表中:

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

对于每个 Note 元素,其指针位于 m_noteList 中,我想获取其标题并将其添加到我的上下文菜单中。目的是单击该标题以打开注释:

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. 我怎么做?我认为 withm_noteList[i]可以访问该元素,但显然编译器需要一些 type QSharedPointer。为什么?

4

1 回答 1

1

QSharedPointer基本上包装了你的指针。所以你不能用'.'直接访问。运算符,这就是您收到此错误的原因:getTitleis not part of the class QSharedPointer

但是,您有多种方法可以检索实际指针:

  1. data:不是最简单的方法,但它是明确的,有时很重要
  2. operator->:所以你可以使用你QSharedPointer喜欢的实际指针m_noteList[i]->getTitle();
  3. operator*: 做类似的事情(*m_noteList[i]).getTitle();
于 2014-02-23T13:26:37.837 回答