Qt如何使用lambda在connect函数中为QPushButton绑定带参数的槽函数
实现代码
Qt5及以上版本可直接使用基于函数指针的connect配合lambda表达式实现,直接捕获你需要传递的str1参数即可,写法如下:
QPushButton *btn = new QPushButton(str1); // 捕获当前类指针this和对应按钮的字符串参数str1,点击触发时调用F1 connect(btn, &QPushButton::clicked, this, [this, str1]() { F1(str1); });
补充说明
- 如果你仍在使用Qt4版本,不支持lambda语法,可通过给按钮绑定自定义属性+sender()获取触发对象的方式实现:
- 按钮创建阶段绑定属性、连接信号
QPushButton *btn = new QPushButton(str1); btn->setProperty("bind_str", str1); connect(btn, SIGNAL(clicked()), this, SLOT(activeProjectClick()));- 槽函数中读取属性传递给F1
void 你的类名::activeProjectClick() { QPushButton *sendBtn = qobject_cast<QPushButton*>(sender()); if (!sendBtn) return; QString targetStr = sendBtn->property("bind_str").toString(); F1(targetStr); } - lambda捕获列表建议用值捕获
str1,避免因变量作用域释放导致的野值问题;如果F1是当前类的成员函数,必须捕获this指针才能正常调用。
内容的提问来源于stack exchange,提问作者user14617379
相关产品推荐
相关产品推荐

