为了将信号连接到插槽,据我所知,信号的参数需要与插槽的参数相匹配。因此,例如:将信号连接到固定值的插槽
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(closeDockWidget()));
但是,如果我想有一个信号呼叫具有不同量的参数的插槽,但总是传递一个恒定值插入插槽什么。例如,使用上面的代码段:
connect(dockWidget->titleBarWidget(), SIGNAL(closeButtonClicked()), ui->sideControls, SLOT(setDockWidget(false)));
或者换言之,每当按下该按钮时,它调用setDockWidget()
函数与假参数。这可能吗?
这个答案不再有效,因为C++ 11上的Qt5语法使得为此目的使用lambda非常容易。 – 2016-06-08 10:36:38
@安德烈,另一方面,你可以'创建代理插槽,这将调用所需的一个.'现在到位 – Lol4t0 2016-06-08 15:04:03
当然,你可以。但额外的插槽意味着您不想要的头部中有更多东西,暴露于外部调用(是的,即使专用插槽可以从外部调用)并将代码分散到多个位置。你甚至可能需要额外的成员变量来包含你想传递的值,从而在你的类中引入额外的状态。 lambda解决方案非常优雅,因此它将代理插槽的引入视为IMO的解决方案。 – 2016-06-08 18:51:37