[英]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]
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.