【问题标题】:Qt: the signal handler is not called when the signal is emittedQt:发出信号时不调用信号处理程序
【发布时间】:2013-12-18 19:56:23
【问题描述】:

我正在做这样的事情:

MyClass::MyClass(QWidget *parent) : QLabel(parent)
{
    this->MyMenu = new QMenu();

    QAction* act_del = new QAction(MyMenu);
    act_delete->setText("MyAction");

    MyMenu->addAction(act_del);

    QObject::connect(act_del,SIGNAL(triggered()),this,SLOT(MySlot()));
}

void MyClass::MySlot()
{
    //Not called
}

关于何时触发 SIGNAL 的任何建议都不会调用 SLOT。这是显示菜单的位置:

void MyClass::contextMenuEvent(QContextMenuEvent *ev)
{
    QPoint globalPos = this->mapToGlobal(ev->pos());

    QAction* selectedItem = MyMenu->exec(globalPos);
    if (selectedItem)
    {

    }
    else
    {
        // nothing was chosen
    }
}

关于为什么不调用 SLOT 有什么建议吗?

【问题讨论】:

  • 您是否在应用程序输出中遇到与此相关的错误? MyClass 是否包含 Q_OBJECT 宏?
  • 另外,QObject::connect 返回布尔值 - 值得检查它是否返回 true
  • 我们至少需要查看 MyClass 的信号和槽定义,以及实际的连接调用。您可能在那里的某个地方出现了不匹配(因此之前的评论是为了检查连接的返回值)。
  • @Zlatomir 是的,它缺少宏。我以为那会遗传。你能把它写下来作为答案吗?我错过了宏

标签: c++ qt qtcore qt-signals


【解决方案1】:

MyClass 需要包含 Q_OBJECT 宏才能使信号槽连接正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2023-03-23
    • 1970-01-01
    • 2011-02-16
    • 2013-06-19
    相关资源
    最近更新 更多