Qt connect 无法识别 lambda 表达式
Qt connect doesn't recognize with lambda expression
我设计了一个 QTableWidget
和 QPushButton
,我想用一个插槽连接这些按钮以隐藏一些行。
我正在使用 lambda 表达式传递一行的数字。但是编译器无法识别这个表达式:
connect(this->ui->tableWidget->cellWidget(i,0),&QPushButton::clicked,[this,i]{hideRows(i);});
我有这个错误:
error: no matching function for call to 'SoftwareUdpater::MainWidget::connect(QWidget*, void (QAbstractButton::*)(bool), SoftwareUdpater::MainWidget::displayTable()::<lambda(int)>)'
- 函数
hideRows(int)
被声明为一个函数。而且,作为插槽,它不起作用,
CONFIG += c++11
在pro文件中添加,
- 我的 class
MainWidget
继承自 QWidget
,
Q_OBJECT
添加在header.
所以我不明白为什么 Qt 5.9.1 MinGw 32 位 .
无法识别 connect()
编辑:[this,i]()
而不是 lambda 表达式的 [this](const int i)
您的连接有误。您不能将不带参数的函数 (clicked()) 与带参数的函数(您的 lambda)连接起来。要验证是否是这种情况,只需执行以下操作:
connect(this->ui->tableWidget->cellWidget(i,0),&QPushButton::clicked,[this](){});
并确保它可以编译。您必须以信号和插槽兼容的方式进行设计。
还要避免在信号和槽中使用 lambda。阅读注意事项 here.
我正在阅读您对已接受答案的评论并注意到问题的根源:抛出此错误是因为对象的有效类型 — 提供给 QObject::connect
;即 QWidget
在你的情况下 - 没有定义参考信号 QPushButton::clicked
.
可能发生的情况是 QPushButton
指针被转换为 QWidget
,然后 指针被赋予 connect
而不是定义信号的原件。
将指针转换回 QPushButton *
,错误应该会消失。
我设计了一个 QTableWidget
和 QPushButton
,我想用一个插槽连接这些按钮以隐藏一些行。
我正在使用 lambda 表达式传递一行的数字。但是编译器无法识别这个表达式:
connect(this->ui->tableWidget->cellWidget(i,0),&QPushButton::clicked,[this,i]{hideRows(i);});
我有这个错误:
error: no matching function for call to 'SoftwareUdpater::MainWidget::connect(QWidget*, void (QAbstractButton::*)(bool), SoftwareUdpater::MainWidget::displayTable()::<lambda(int)>)'
- 函数
hideRows(int)
被声明为一个函数。而且,作为插槽,它不起作用, CONFIG += c++11
在pro文件中添加,- 我的 class
MainWidget
继承自QWidget
, Q_OBJECT
添加在header.
所以我不明白为什么 Qt 5.9.1 MinGw 32 位 .
无法识别connect()
编辑:[this,i]()
而不是 lambda 表达式的 [this](const int i)
您的连接有误。您不能将不带参数的函数 (clicked()) 与带参数的函数(您的 lambda)连接起来。要验证是否是这种情况,只需执行以下操作:
connect(this->ui->tableWidget->cellWidget(i,0),&QPushButton::clicked,[this](){});
并确保它可以编译。您必须以信号和插槽兼容的方式进行设计。
还要避免在信号和槽中使用 lambda。阅读注意事项 here.
我正在阅读您对已接受答案的评论并注意到问题的根源:抛出此错误是因为对象的有效类型 — 提供给 QObject::connect
;即 QWidget
在你的情况下 - 没有定义参考信号 QPushButton::clicked
.
可能发生的情况是 QPushButton
指针被转换为 QWidget
,然后 指针被赋予 connect
而不是定义信号的原件。
将指针转换回 QPushButton *
,错误应该会消失。