当QComboBox的currentIndex发生变化时,我需要用currentIndex + 1调用一个函数。我今天早上在语法上苦苦挣扎:
// call function readTables(int) when currentIndex changes.
connect(ui->deviceBox, SIGNAL(currentIndexChanged()),
SLOT( readTables( ui->deviceBox->currentIndex()+1) );
错误:预期')' SLOT(readTables(ui-> deviceBox-> currentIndex()+ 1));
添加结束)不会工作......!
答案 0 :(得分:7)
<强>第一即可。如果你可以修改函数readTables
,那么你可以写:
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)), SLOT(readTables(int));
并在readTables
void MyClass::readTables( int idx ) {
idx++;
// do another stuff
}
第二:如果您可以使用Qt 5+和c ++ 11,请写下:
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)),
[this]( int idx ) { readTables( idx + 1 ); }
);
第三次:如果您无法修改readTables
且无法使用c ++ 11,请编写自己的广告位(比如说readTables_increment
)这样:
void MyClass::readTables_increment( idx ) {
readTables( idx + 1 );
}
并将信号连接到它:
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)),
SLOT(readTables_increment(int))
);
答案 1 :(得分:1)
QComboBox::currentIndexChanged
要求QString或int作为单个参数。这里有2个错误:
currentIndexChanged()
SLOT
作为需要插槽签名的插槽参数;相反,你试图通过“即时”传递一个不允许的参数。int
参数的新插槽:
void ThisClass::slotCurrentIndexChanged(int currentIndex) {
ui->deviceBox->readTables(ui->deviceBox->currentIndex() + 1);
}