给出外部SDK的两个标头
class A
{
public:
class B
{
};
public slots:
void onValue(B* b);
};
class C
{
signal:
void value(A::B* b);
};
问题是如何连接C的信号和插槽 - > A,因为数据类型在运行时被视为不兼容。
答案 0 :(得分:2)
正如您所注意到的,下面的代码报告了报告signal
和slot
之间不兼容的运行时错误:
QObject::connect( &c, SIGNAL( value( A::B* ) ), &a, SLOT( onValue( B* ) ) );
错误是:
QObject :: connect:不兼容的发送方/接收方参数 C ::值(A :: B *) - > A :: onValue(B *)
这是因为SIGNAL
和SLOT
是宏,并且调用的兼容性在运行时得到解决,并且当它应该像A::B
和B
一样工作时会失败相同(很可能是因为它显然是一个简单的文本比较)。
但这是旧式连接命令(前Qt5)。
使用新样式连接命令:
QObject::connect( &c, &C::value, &a, &A::onValue );
编译时没有报告错误,运行时也没有报告错误。