Lei*_*sen 14 c++ qt qt4 signals-slots
为了将信号连接到插槽,据我所知,信号的参数需要与插槽的参数匹配.例如:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
Run Code Online (Sandbox Code Playgroud)
但是,如果我想让信号调用具有不同参数量的插槽,但总是将常量值传递到插槽中,该怎么办?例如,使用上面的代码:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
Run Code Online (Sandbox Code Playgroud)
或者换句话说,每当按下按钮时,它都会setDockWidget()使用false参数调用该函数.这可能吗?
BiT*_*TOk 13
您可以使用带有常量参数的所需调用的 lambda .例:
connect(obj, &ObjType::signalName, [this]() { desiredCall(constantArgument); });
Run Code Online (Sandbox Code Playgroud)
有关新连接语法的更多信息:https://wiki.qt.io/New_Signal_Slot_Syntax.
在某种程度上,是的,你可以.但它不是很强大:只需这样声明setDockWidget:
[virtual] void setDockWidget(bool state=false) ;
Run Code Online (Sandbox Code Playgroud)
并以这种方式声明连接:
connect(emitter, SIGNAL(closeButtonClicked()), receiver, SLOT(setDockWidget()));
Run Code Online (Sandbox Code Playgroud)
不带参数调用的setDockWidget采用默认值.