我设计了一个QTableWidget
与QPushButton
,我想用一个插槽连接这些按钮来隐藏一些行。Qt连接不识别lambda表达式
我正在使用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)
被声明为函数。而且,作为一个槽,它不会从QWidget
工作, CONFIG += c++11
在Pro文件被添加,- 我的类继承
MainWidget
, Q_OBJECT
在标题中加入。
所以我不udnerstand为什么connect()
不受的Qt 5.9.1 MinGW的32位认可。
编辑:[this,i]()
,而不是[this](const int i)
的lambda表达式
除了答案所说的外,你很可能想通过值来捕获'i'而不是将它作为参数'connect(this-> ui-> tableWidget-> cellWidget(i,0),&QPushButton :: clicked,[this,i](){hideRows(i);});' – PeterT
同时使用'[this,i]'和'(int i)'没有多大意义。此外,你可能需要将你的QWidget *下载到QPushbutton *'connect((QPushButton *)this-> ui-> tableWidget-> cellWidget(i,0),&QPushButton :: clicked,[this,i]() {hideRows(ⅰ);});'。这是假设它总是一个QPushbutton。 – PeterT
这个错误信息的意思是,没有这样的'connect'函数,它接受这些参数。最有可能的原因是,你不知道如何用C++ 11构建,或者你用Qt4或其他外部类似的东西构建。也许你应该编辑问题来添加完整的错误信息,并列出候选人的名单。还要添加用于构建该文件的编译命令。 – hyde