以QComboBox中的currentIndexChanged信号为例:
在Qt4中由于填写信号时,需要填写参数,所以不存在此问题。以下解决方法为在Qt5中遇到使的解决方案。
解决方法1:connect(&object1, (void (QComboBox::*)(int))&QComboBox::currentIndexChanged, &object2, &Slot);
解决方法2:connect(&object1, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged, &object2, &Slot);
第一个使用的是 C 风格的强制类型转换。此时,如果你改变了信号的类型,那么你就会有一个潜在的运行时错误。例如,如果我们把(const QString &, const QDate &)
两个参数修改成(const QDate &, const QString &)
,C 风格的强制类型转换就会失败,并且这个错误只能在运行时发现。而第二种则是 C++ 推荐的风格,当参数类型改变时,编译器会检测到这个错误。
参考自豆子的文章