首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QComboBox连接

QComboBox连接
EN

Stack Overflow用户
提问于 2015-01-21 23:55:19
回答 2查看 16.8K关注 0票数 4

当currentIndex+1的currentIndex发生变化时,我需要用QComboBox调用一个函数。今天早上我在语法上苦苦挣扎:

代码语言:javascript
复制
// call function readTables(int) when currentIndex changes.

connect(ui->deviceBox, SIGNAL(currentIndexChanged()),
   SLOT( readTables( ui->deviceBox->currentIndex()+1) );

错误:应为')‘插槽( readTables(ui->deviceBox->currentIndex()+1) );

添加结束语)将不起作用...!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-22 00:10:45

First。如果你可以修改函数readTables,那么你可以这样写:

代码语言:javascript
复制
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)), SLOT(readTables(int));

readTables

代码语言:javascript
复制
void MyClass::readTables( int idx ) {
    idx++;
    // do another stuff
}

Second:如果您可以使用Qt 5+和c++11,只需编写:

代码语言:javascript
复制
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)),
    [this]( int idx ) { readTables( idx + 1 ); }
);

Third:如果您不能修改readTables,也不能使用c++11,那么可以像这样编写您自己的插槽(比如readTables_increment):

代码语言:javascript
复制
void MyClass::readTables_increment( idx ) {
    readTables( idx + 1 );
}

并将信号连接到它:

代码语言:javascript
复制
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)),
    SLOT(readTables_increment(int))
);
票数 10
EN

Stack Overflow用户

发布于 2015-01-22 00:05:59

QComboBox::currentIndexChanged要求将QStringint作为单个参数。这里有两个错误:

  • 您没有连接到任何现有的信号,因为您指定了currentIndexChanged()
  • 您没有将SLOT作为需要插槽签名的插槽参数进行传递;相反,您正在尝试传递一个不允许的“动态”参数。

如果你对使用C++ lambdas没意见的话,@borisbn的建议是非常好的。否则,您将不得不使用int参数声明一个新的插槽:

代码语言:javascript
复制
void ThisClass::slotCurrentIndexChanged(int currentIndex) {
    ui->deviceBox->readTables(ui->deviceBox->currentIndex() + 1);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28071461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档