Qt 信号插槽类范围类型

Qt Signal Slots class scope types

本文关键字:范围 类型 插槽 信号 Qt      更新时间:2023-10-16

给定来自外部 SDK 的两个标头,

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::连接:不兼容的发送方/接收方参数 C::value(A::B*( --> A::onValue(B*(

这是因为SIGNALSLOT是宏,调用的兼容性在运行时解析,并且在这种情况下失败,因为它应该像A::B一样工作,B是相同的(很可能是因为它显然是一个简单的文本比较(。

但这是一个旧式的连接命令(Qt5 之前(。

使用新的样式连接命令:

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

在编译时和运行时都不会报告任何错误,并且连接将正常工作。