将 QTimer 与带参数的 Slot 连接起来
Connect QTimer with a Slot with parameters
我尝试了以下方法:
connext(&timer, &QTimer::timeout, this, &myClass::myMethod(_param1, _param2)); // does not work
timer.setSingleShot(true);
timer.start(100);
QTimer 类型的计时器是 class 的成员元素。
有没有办法将计时器的 timeout() 信号连接到具有多个参数的方法?
QTimer
的超时信号 void timeout()
本身没有足够的参数来调用 myClass::myMethod(_param1, _param2);
(超时应该在 _param1
& _param2
来自?)
您可以使用 lambda 函数:
//assuming you have _param1 & _param2 as variables before this point
connext(&timer, &QTimer::timeout, this, [=]() { myMethod(_param1, _param2); });
timer.setSingleShot(true);
timer.start(100);
需要注意的一件事是,通过使用 this
作为 connect()
的接收者对象,您可以将连接的生命周期与计时器的生命周期和当前对象的生命周期联系起来(this
),如果两个对象之一死亡并且 lambda(隐式调用 this->myMethod()
)在释放 this
后未执行,则应确保正确销毁连接。
或者您可以在 class 中创建一个 void myClass::handleTimeout()
函数,将时间超时作为插槽连接到它,然后 在那里 调用 myMethod(_param1, _param2)
void myClass::handleTimeout()
{
//assuming _param1 & _param2 are variables accessible in handleTimeout()
myMethod(_param1, _param2));
}
//Your original function...
void myClass::someFunction()
{
//...
connext(&timer, &QTimer::timeout, this, &myClass::handleTimeout);
timer.setSingleShot(true);
timer.start(100);
//...
}
我尝试了以下方法:
connext(&timer, &QTimer::timeout, this, &myClass::myMethod(_param1, _param2)); // does not work
timer.setSingleShot(true);
timer.start(100);
QTimer 类型的计时器是 class 的成员元素。
有没有办法将计时器的 timeout() 信号连接到具有多个参数的方法?
QTimer
的超时信号 void timeout()
本身没有足够的参数来调用 myClass::myMethod(_param1, _param2);
(超时应该在 _param1
& _param2
来自?)
您可以使用 lambda 函数:
//assuming you have _param1 & _param2 as variables before this point
connext(&timer, &QTimer::timeout, this, [=]() { myMethod(_param1, _param2); });
timer.setSingleShot(true);
timer.start(100);
需要注意的一件事是,通过使用 this
作为 connect()
的接收者对象,您可以将连接的生命周期与计时器的生命周期和当前对象的生命周期联系起来(this
),如果两个对象之一死亡并且 lambda(隐式调用 this->myMethod()
)在释放 this
后未执行,则应确保正确销毁连接。
或者您可以在 class 中创建一个 void myClass::handleTimeout()
函数,将时间超时作为插槽连接到它,然后 在那里 调用 myMethod(_param1, _param2)
void myClass::handleTimeout()
{
//assuming _param1 & _param2 are variables accessible in handleTimeout()
myMethod(_param1, _param2));
}
//Your original function...
void myClass::someFunction()
{
//...
connext(&timer, &QTimer::timeout, this, &myClass::handleTimeout);
timer.setSingleShot(true);
timer.start(100);
//...
}