簡體   English   中英

在for Loop中使用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]

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM