Qt 信号槽 class 范围类型

Qt Signal Slots class scope types

给定两个来自外部 SDK 的 headers,

class A
{
  public:
   class B
   {
   };
  public slots:
   void onValue(B* b);
};

class C
{
  signal:
   void value(A::B* b);
};

问题是我如何连接 C -> A 的信号和槽,因为数据类型在 运行 时间内被认为是不兼容的。

如您所见,下面的代码报告 signalslot 之间的运行时错误报告不兼容:

QObject::connect( &c, SIGNAL( value( A::B* ) ), &a, SLOT( onValue( B* ) ) );

错误是:

QObject::connect: Incompatible sender/receiver arguments C::value(A::B*) --> A::onValue(B*)

这是因为 SIGNALSLOT 是宏,调用的兼容性在运行时解决,当它应该作为 A::BB 工作时失败了。是相同的(很可能是因为它显然是一个简单的文本比较)。

但这是旧式连接命令(Qt5 之前)。

使用新式连接命令:

QObject::connect( &c, &C::value, &a, &A::onValue );

编译时和运行时都不会报错,连接正常。