c++ - 虚拟Qt信号?

标签 c++ qt

在查看一些 Qt C++ 代码时,我发现了这个:

class Foo
{
  Q_OBJECT

signals:
  virtual void someSignal(const QString& str, int n)
  {
    Q_UNUSED(str);
    Q_UNUSED(n);
  }
  ...
};

现在,Qt 信号不能有主体,所以我很惊讶这甚至可以编译(也许是因为主体实际上是空的)。我也没有看到将信号设为虚拟的意义......它不能有实体,那么如何覆盖它?

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

最佳答案

这对我来说看起来很臭。

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

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

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

void MyDerived::doSomething()
{
    // ....
    emit somethingHappened();
}

也许这就是问题中声明的目的。

关于c++ - 虚拟Qt信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667788/

相关文章:

c++ - 析构函数的功能

c++ - 如何将 QKeyEvent::nativeModifiers() 转换为 UINT fsModifiers(用于 winapi RegisterHotKey)

c++ - 使用 QRegExp 解析 header

c++ - Qt 回调列表

qt - QSharedPointer dynamicCast 和 objectCast 在 ubuntu 上失败

python - 我怎样才能取回一个类的动态创建的对象?

qt - 在 Qt 中使用 QNetworkAccessManager 的持久连接

c++ - 从命令行解析输入和输出文件名作为参数

c++ - 如何消除此枚举到字符串映射代码的样板?

c++ - 如何在不提供 C++ 值的情况下检查用户何时按下回车键