菜单操作连接未找到插槽

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,因为在这种情况下,你会得到一个静态编译器时间错误,这对于避免这些繁琐的问题很方便。

【讨论】:

以上是关于菜单操作连接未找到插槽的主要内容,如果未能解决你的问题,请参考以下文章

BB 插槽未触发 Http 连接

Qt 插槽同时断开连接并从不同线程调用

跟随发出的信号到其连接的插槽?

PyQt在连接到信号时将参数发送到插槽

使用portaudio回调已连接/未连接的设备?

xshell避免长时间未操作断开连接