我設計了一個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