Qt Signal Slots类范围类型

时间:2017-02-08 16:43:57

标签: c++ qt qt-signals slot

给出外部SDK的两个标头

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

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

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

1 个答案:

答案 0 :(得分:2)

正如您所注意到的,下面的代码报告了报告signalslot之间不兼容的运行时错误:

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

错误是:

  

QObject :: connect:不兼容的发送方/接收方参数         C ::值(A :: B *) - > A :: onValue(B *)

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

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

使用新样式连接命令:

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

编译时没有报告错误,运行时也没有报告错误。