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);
});
我正在为继电器控制器编写一个应用程序。我有一个 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);
});