使用Qt文档QOverload示例连接QSocketNotifier私有信号提示找不到of函数
问题原因及解决方案
报错的核心原因是Qt的私有信号会在参数列表末尾自动追加一个QSocketNotifier::QPrivateSignal类型的内部参数,你复制的官方示例省略了这个内部参数,导致QOverload匹配不到正确的信号函数签名。
修复方法
修改QOverload的模板参数列表,补全第三个私有参数即可,槽函数或Lambda不需要修改,依旧可以只接收前两个业务参数,正确的连接代码如下:
connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal>::of(&QSocketNotifier::activated), [=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ });
补充说明
- 这个
QPrivateSignal是Qt用于标记私有信号的特殊类型,仅用于函数签名匹配,防止用户主动调用信号,连接时不用在Lambda的参数里写这个参数,Qt会自动忽略该参数的传递。 - 不需要额外修改项目配置或引入其他头文件,只要修改这一处连接代码即可编译通过。
内容的提问来源于stack exchange,提问作者smsware
相关产品推荐
相关产品推荐

