虚拟Qt信号?

Rob*_*Rob 16 c++ qt

在回顾一些Qt C++代码时,我遇到了这个问题:

class Foo
{
  Q_OBJECT

signals:
  virtual void someSignal(const QString& str, int n)
  {
    Q_UNUSED(str);
    Q_UNUSED(n);
  }
  ...
};
Run Code Online (Sandbox Code Playgroud)

现在,Qt信号不能有一个身体所以我很惊讶这甚至编译(也许是因为身体实际上是空的).我也没有看到将信号虚拟为......它不能有一个身体所以它怎么能被覆盖?

我在这里遗漏了什么,或者这是一个有效的代码味道?

Gar*_*ell 17

这看起来很臭我.

在基类中声明信号然后从派生类中发出信号是有效的,例如

class MyBase : public QObject
{
    Q_OBJECT
// ...
signals:
    void somethingHappened();
};

class MyDerived : public MyBase
{
    Q_OBJECT
// ...
    void doSomething();
};

void MyDerived::doSomething()
{
    // ....
    emit somethingHappened();
}
Run Code Online (Sandbox Code Playgroud)

也许这就是问题中的声明要达到的目的.