简单的信息就不说了,主要谈谈区别,首先结论是 推荐用 lambda
格式绑定信号槽,个人看法,有其他建议欢迎讨论,具体原因如下:
-
SIGNAL,SLOT
是 Qt4
时期的方法, lambda
是 Qt5
引入的。新的总比老的好 ~( ̄▽ ̄)~*
-
SIGNAL(sig())
等价于 "2sig()"
, SLOT(slot())
等价于 "1slot()"
,他们是 Qt
的宏,只是一个 c
格式的字符串,无法在编译期对信号槽进行类型检查;而 lambda
采用 &Class::func
函数指针的形式进行信号槽绑定,可以在编译期进行类型检查( ̄︶ ̄)↗
-
SIGNAL,SLOT
中函数参数不推荐使用 const, &
等修饰,不推荐参数间有空格,但 clang-formate
会自动在参数间加空格,所以总会有类似警告出现 o(≧口≦)o Signature is not normalized. Use checkUpdates(QUrl,QString) instead of checkUpdates(const QUrl &, const QString &) [clazy-connect-not-normalized]
-
lambda
在绑定重载函数时,指定参数类型方式:qOverload<int>(&QButtonGroup::buttonClicked)
或 QOverload<int>::of(&QButtonGroup::buttonClicked)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)