先说结论:
在执行 QObject::connect() 时,它会对signal与slot参数的名称进行对比,只有名称完会一致的才能连接上,否会不失败。
值得注意的是:它只管对类型的名称进行比较,完全不会做任何的类型推导与类型检查。
问题代码:
sender.h
class
定义了两个信号:
- loginResult() 这个信号采用 eResult 作为参数,而 eResult 是 Sender 类内部定义的类型;
- otherSignal() 作为参照,使用Qt所定义的类型的信号。
receiver.h
class
在 Receiver 中定义了两个slot分别接收 Sender 的两个信号。
在 Receiver 的构造函数中:
Receiver
结果在运行时报错:
![6c787be26580d4cbb983f6b30e0527b9.png](https://img-blog.csdnimg.cn/img_convert/6c787be26580d4cbb983f6b30e0527b9.png)
提示信号没有连接上。
如果我们将 eResult 放到 Sender 类外面,则没有这个问题。这是为什么呢?
是不是只要是类内部的类型都会出错?
为了排除是我们自定义的枚举的原因,我们把自己定义的 eResult 改成 MyString,其它也对应改过来。
再试:
![90fd46cc5efb184e25b9078049568b57.png](https://img-blog.csdnimg.cn/img_convert/90fd46cc5efb184e25b9078049568b57.png)
结果还是报错: