Qt—由Qt对象发送的信号,该对象调用了receiver对象重写的事件函数

Qt—由Qt对象发送的信号,该对象调用了receiver对象重写的事件函数,qt,signals-slots,qt4.8,qevent,Qt,Signals Slots,Qt4.8,Qevent,Qt问题: 我正在从线程a上运行的对象a向线程B上运行的对象B发送一个信号。 我还通过覆盖对象B中的虚拟事件函数来处理自定义事件 面临的问题:当对象A发出任何信号时,没有调用对象B中相应的插槽,而是调用了由对象B重写的事件函数。因此,如何从对象B的事件函数接收的QEvent对象提取通过信号发送的参数,或者如何延迟该事件,以便调用相应的插槽 对象A正在gui线程中运行,其职责是更新gui。对象B正在实现gui逻辑并在不同的线程中运行。对象A通过信号和插槽向对象B通知gui更改。对象B还处理来自另一

Qt问题:

我正在从线程a上运行的对象a向线程B上运行的对象B发送一个信号。 我还通过覆盖对象B中的虚拟事件函数来处理自定义事件

面临的问题:当对象A发出任何信号时,没有调用对象B中相应的插槽,而是调用了由对象B重写的事件函数。因此,如何从对象B的事件函数接收的QEvent对象提取通过信号发送的参数,或者如何延迟该事件,以便调用相应的插槽


对象A正在gui线程中运行,其职责是更新gui。对象B正在实现gui逻辑并在不同的线程中运行。对象A通过信号和插槽向对象B通知gui更改。对象B还处理来自另一个非QThread线程的事件。我正在为此使用自定义事件,并使用postEvent函数通知对象B。对象B具有用于接收自定义事件的重写事件函数。现在的问题是,当我从对象A向对象B发送任何信号以通知与gui相关的更改时,它被事件函数捕获,并且相应的插槽没有被调用

您的问题非常简单:当重写QObject::event方法时,您必须调用基类的实现。实际上,是QObject::event作用于QMetaCallEvent并执行排队方法调用

你应该做以下几点:

class MyObject : public QObject {
  Q_OBJECT
protected:
  bool event(QEvent * ev);
  ...
};

bool MyObject::event(QEvent * ev) {
  if (ev->type() == MyEventType) {
    ...
    return ...;
  }
  else
    return QObject::event(ev);
}

你能提供一些代码来解释你想做什么吗?如果问题中包含mvce,那么它们会更容易被发现:这个问题不需要任何代码:它是用令人惊讶的清晰散文写成的+1不要用评论来表示感谢。说一个好答案的一种方式是投票,如果有不止一次,就接受最好的答案。