在 for 循环中使用 lambda 函数连接信号插槽
Connecting Signal Slots using lambda function in for Loop
>我需要向插槽添加一个额外的参数(2 个参数(,同时连接一个信号,只有一个参数用于多个相同类型的小部件。所以我创建了一个Widget
对象的向量,尝试在 for 循环中使用 lambda 函数建立连接。
这是我尝试过的插图:
QWidget* widget1, widget2, widget3, widget4;
/*...
Assign memory to them
...*/
QVector <QWidget> m_widgetVec = {widget1, widget2, widget3, widget4}
for(int i=0; i < 4; i++)
{
connect(m_widgetVec[i], &QWidget::clicked, [&](bool state){
myfunc(i, state);}));
}
当我收到的状态执行值正常时,i
的值始终为 0。我预计i
为 0,1,2,3。对于小部件 1、2、3、4。
有什么建议吗?感谢您的帮助。
您的 lambda 使用引用捕获 [&]
,因此 lambda 内部的i
只是对 for
循环的控制变量的引用(甚至在循环终止后立即成为悬空引用(。您想要的是按值捕获i
:
[i](bool state){myfunc(i, state);}
如果myfunc
是该类的成员,则还需要捕获this
:
[i, this](bool state){myfunc(i, state);}
或者只是按价值捕获所有内容:
[=](bool state){myfunc(i, state);}
index
的运行时值是多少?
你不想连接m_widgetVec[i]
而不是m_widgetVec[index]
吗?
相关文章:
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- 某些 boost::asio 异步函数是否将处理程序连接到操作,以便处理程序被触发一次?
- QObject::连接不起作用 - 使用函数语法找不到信号
- 在函数中连接两个字符,并在 C++ 中返回输出
- 用于连接向量的 Constexpr 函数
- deleteNode函数出现以中断连接列表
- QT - 连接 Qml 按钮 单击到 Cpp 构造函数
- Wt 连接函数,将参数传递给作为连接函数参数的函数
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- C++ 将不同的类型连接成函数的字符串
- 如何编写模板函数来添加整数但连接字符串和字符类型?
- 在 for 循环中使用 lambda 函数连接信号插槽
- QObject::使用update()函数连接计时器
- 函数连接两个写入缓冲区开头的字符串
- 使用QObject::connect()时,类型签名是否重要,用于将函数连接到信号
- 如何将Qt动作与函数连接起来
- 如何从一个线程发出信号,并将信号与一个单独的函数连接起来
- QT 5 connect()函数连接textEditor和主窗口