任务是将具有一个参数的一个信号连接到具有零参数的插槽。使用“旧的” Qt4连接方式,它的工作原理如下
connect(object1, SIGNAL(signal(int param)), object2, SLOT(slot()))
但是,如果我想使用类型安全的Qt5-连接怎么办?
文档仅提及以下情况:
连接到插槽中的默认参数
,并使用上述基于字符串的连接方式。
答案 0 :(得分:6)
Qt5样式的连接机制忽略信号的额外参数,就像您可以在Qt4样式中指定的那样:
信号和插槽机制是安全类型:信号的签名必须与接收插槽的签名匹配。 (实际上,插槽的签名可能比接收到的信号短,因为它可以忽略其他参数。)由于签名是兼容的,因此编译器可以帮助我们在使用函数指针时检测类型不匹配的情况,基于语法。基于字符串的SIGNAL和SLOT语法将在运行时检测类型不匹配。
来自Qt Docs(重点是我)。
因此您可以使用这种新样式:
connect(&object1, &ClassObject1::signal, &object2, &ClassObject2::slot);
答案 1 :(得分:0)
您可以毫无问题地作为Qt4-Way连接。唯一不能做的就是连接参数较少的插槽。
答案 2 :(得分:0)
Nevermind,找到了一种无需声明和定义额外插槽即可处理此问题的方法:解决方案是使用Lambda来消除其他参数。
示例(如果object2是我们自己的项目,则为this)。 遵循问题中的命名方式:
connect(object1, &Object1::signal, [this](int) { slot(); } );