Qt Connect中使用Qt::UniqueConnection按位或组合导致编译失败问题
问题结论
该现象是完全符合C++语法规则与Qt API设计的正常预期行为,既不是编译器bug,也不是Qt框架实现错误。
原因解析
- 你的第一个认知错误:
connect函数接收连接类型的形参明确声明为Qt::ConnectionType枚举类型,并非int类型,不存在“支持直接接收int参数”的设计。 - C++对枚举类型的转换有明确规则:枚举值可以隐式转换为整型,但整型不能隐式反向转换为枚举类型。
- 单独传入
Qt::QueuedConnection或Qt::UniqueConnection时,传入值本身就是Qt::ConnectionType类型的枚举常量,可直接匹配形参类型,因此编译正常。 - 对两个枚举值执行
|按位或运算时,枚举值会先触发整型提升,运算返回值为int类型。此时直接将int值传入要求Qt::ConnectionType类型的形参,会触发类型不匹配的编译错误。
- 单独传入
- 你贴出的示例代码存在一处语法笔误:
SLOT(mySlot())后的右括号提前闭合了connect的参数列表,后续的static_cast部分实际没有作为参数传入connect,修正括号位置后配合显式类型转换即可正常运行。
合规写法
将按位或组合后的结果显式转换为Qt::ConnectionType类型即可,代码示例:
connect( mySource, SIGNAL(mySig()), this, SLOT(mySlot()), static_cast<Qt::ConnectionType>(Qt::QueuedConnection | Qt::UniqueConnection) );
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

