QTimer,参数化槽

QTimer, Parametrized slot

我正在为继电器控制器编写一个应用程序。我有一个 opens/closes 中继的功能:

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);
}

不做那么多slot能不能搞定,谁有更巧妙的办法? 问候

如果您使用的是 Qt5,则可以使用 lambda 函数:

void QTimer::singleShot(int msec, Functor functor)

QTimer::singleShot(1000, [&](){
    setRelay(1,false);
});