菜单操作连接未找到插槽
Posted
技术标签:
【中文标题】菜单操作连接未找到插槽【英文标题】:Menu action connection does not find slot 【发布时间】:2014-02-23 17:42:29 【问题描述】:我正在创建一个 QSystemTrayIcon 托盘菜单。它的上下文菜单有几个我需要识别的操作。
public slots:
void s_showNote();
void Traymenu::createMainContextMenu()
...
std::string noteTitle = m_noteList[i]->getTitle();
QString menuEntryName = QString::fromStdString(noteTitle);
QAction *openNote = m_mainContextMenu.addAction(menuEntryName);
QObject::connect(openNote,SIGNAL(triggered() ),this,SLOT(s_showNote()) );
QVariant noteID;
noteID.setValue(m_noteList[i]->getID());
openNote->setData(noteID);
错误是
QObject::connect: No such slot QSystemTrayIcon::s_showNote()
上面的所有代码都是我的类定义的一部分,它继承自QSystemTrayIcon
。如何调用 SLOT?
【问题讨论】:
您可能忘记了类声明中的 Q_OBJECT 宏? 它不存在,如果我把它放在我的头文件中,我会在Traymenu::Traymenu(QApplication * appIn)
中得到错误,上面写着undefined reference to 'vtable for Traymenu'
。不知道如何进一步......
啊,我需要手动重新运行 qmake 才能正常工作。谢谢!
【参考方案1】:
您似乎至少存在两个问题:
将 Q_OBJECT 用于 QObject 派生类。
你需要相应地重新运行qmake。
至于第一点,请在未来使用 C++11 和至少 Qt 5.2,因为在这种情况下,你会得到一个静态编译器时间错误,这对于避免这些繁琐的问题很方便。
【讨论】:
以上是关于菜单操作连接未找到插槽的主要内容,如果未能解决你的问题,请参考以下文章