在 Qt 5(及更高版本)配合 C++11 及以上标准时,可以通过 lambda(匿名函数) 来简化信号与槽的连接方式。这样不仅可以将逻辑代码直接内联在连接处,还能根据需要灵活捕获外部变量。下面介绍其基本用法与常见示例。
1. 基本写法
在使用 Qt::connect 时,如果信号是新版的 functor 写法(如 &QPushButton::clicked
),即可直接将槽写成一个 lambda,例如:
connect(button,
&QPushButton::clicked,
this,
[=]() {
// 这里就是槽函数的实现
qDebug() << "Button is clicked!";
});
其中, [=]
表示以“值捕获”的方式捕获本作用域内的变量;还可以使用 [this]
、[&]
等进行更灵活的捕获(参考下文)。
2. 带参数的用法
有些信号是带参数的,比如 QSpinBox::valueChanged(int value)
,我们可以在 lambda 形参列表里直接声明以接收该参数:
connect(spinBox,
QOverload<int>::of(&QSpinBox::valu