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

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中引用的对象。我怎么做?我以为m_noteList[i]可以访问该元素,但是显然编译器希望使用QSharedPointer类型的东西。为什么?

最佳答案

QSharedPointer基本上包装了指针。因此,您不能直接使用“。”进行访问。运算符,这是您收到此错误的原因:getTitle不属于类QSharedPointer

但是,您可以通过多种方式来检索实际的指针:


data:不是最简单的方法,但它是显式的,有时很重要
operator->:因此您可以像实际指针一样使用QSharedPointer
m_noteList[i]->getTitle();:执行类似operator*的操作

10-06 12:16