C++ QTimer,参数化插槽

C++ QTimer,参数化插槽,c++,qt,qt5,qtimer,C++,Qt,Qt5,Qtimer,我正在为继电器控制器编写一个应用程序。我有一个打开/关闭继电器的功能: void setRelay(unsigned int relay_number, bool state); 现在我想做一些按钮来打开继电器,比如说1sek 我想做这样的事: void on_button_clicked() { setRelay(1, true); QTimer::singleShot(1000,this,SLOT(setRelay(1,false))) } 是的,我知道信号不是那样的。

我正在为继电器控制器编写一个应用程序。我有一个打开/关闭继电器的功能:

void setRelay(unsigned int relay_number, bool state);
现在我想做一些按钮来打开继电器,比如说1sek

我想做这样的事:

void on_button_clicked()
{
    setRelay(1, true);
    QTimer::singleShot(1000,this,SLOT(setRelay(1,false)))
}
是的,我知道信号不是那样的。 有没有办法改变定时器发出的信号,这样它就会关闭继电器。最接近我的是:

QTimer::singleShot(1000,this,SLOT(relay_1_off()));
然后我必须为每个继电器制作一个插槽来关闭它:

void relay_1_off(){
    setRelay(1,false);
}
能不能不用做这么多槽,有谁有更聪明的方法?
问候语

如果您使用的是Qt5,则可以使用lambda功能:


Qt的版本是什么?你有什么?我使用的是最新的5.9版本。真的需要[&]吗?我认为[]在这种情况下就可以了。你必须把它传递给上下文,如果setRelay是
this
的一种方法,那么传递给你就足够了:
QTimer::singleShot(1000,[this](){
@KarolŻurowski如果它对你有用,别忘了把我的答案标记为正确。我确实这样做了。再次感谢你:)@KarolŻurowski否,请检查以下链接,以便查看答案如何标记为正确::P
QTimer::singleShot(1000, [&](){
    setRelay(1,false);
});