简单的信息就不说了,主要谈谈区别,首先结论是 推荐用
lambda
格式绑定信号槽,个人看法,有其他建议欢迎讨论,具体原因如下:
SIGNAL,SLOT
是Qt4
时期的方法,lambda
是Qt5
引入的。新的总比老的好 ~( ̄▽ ̄)~*SIGNAL(sig())
等价于"2sig()"
,SLOT(slot())
等价于"1slot()"
,他们是Qt
的宏,只是一个c
格式的字符串,无法在编译期对信号槽进行类型检查;而lambda
采用&Class::func
函数指针的形式进行信号槽绑定,可以在编译期进行类型检查( ̄︶ ̄)↗SIGNAL,SLOT
中函数参数不推荐使用const, &
等修饰,不推荐参数间有空格,但clang-formate
会自动在参数间加空格,所以总会有类似警告出现 o(≧口≦)oSignature 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)