QComboBox连接

时间:2015-01-21 15:55:19

标签: qt qcombobox slot

当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));

添加结束)不会工作......!

2 个答案:

答案 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要求QStringint作为单个参数。这里有2个错误:

  • 您没有连接任何现有信号,因为您指定了不存在的currentIndexChanged()
  • 您没有传递SLOT作为需要插槽签名的插槽参数;相反,你试图通过“即时”传递一个不允许的参数。
如果你可以使用C ++ lambdas,那么@borisbn建议非常好。 否则,您将必须声明一个带有int参数的新插槽:

void ThisClass::slotCurrentIndexChanged(int currentIndex) {
    ui->deviceBox->readTables(ui->deviceBox->currentIndex() + 1);
}