将信号连接到具有恒定值的插槽

时间:2012-03-25 16:37:36

标签: c++ qt qt4 signals-slots

为了将信号连接到插槽,据我所知,信号的参数需要与插槽的参数匹配。例如:

connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));

但是,如果我想让信号调用具有不同参数量的插槽,但总是将常量值传递到插槽中,该怎么办?例如,使用上面的代码:

connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));

或换句话说,每当按下按钮时,它会使用false参数调用setDockWidget()函数。这可能吗?

3 个答案:

答案 0 :(得分:13)

您可以将lambda与所需的调用常量参数一起使用。例如:

connect(obj, &ObjType::signalName, [this]() { desiredCall(constantArgument); });

有关新连接语法的更多信息:https://wiki.qt.io/New_Signal_Slot_Syntax

答案 1 :(得分:8)

不,这是不可能的。您只能连接具有少于或等于参数计数的插槽,而不是相应的信号。 (见documentation

您必须创建代理插槽,该插槽将调用所需的插槽。

答案 2 :(得分:6)

在某种程度上,是的,你可以。但它不是很强大:只需以这种方式声明setDockWidget

[virtual] void setDockWidget(bool state=false) ;

以这种方式声明连接:

connect(emitter, SIGNAL(closeButtonClicked()), receiver, SLOT(setDockWidget()));

不带参数调用的setDockWidget采用默认值。