尽管我认为它并不复杂,但我很难说出这个问题。
我想做一些类似的事情,QTimer::singleshot()
但我希望它仍然只调用 SLOT 一次,即使QTimer::singleshot()
在它触发之前被多次调用。
如果您只想在计时器上调用一次插槽,则可以查看类似
QTimer::singleShot(500, this, SLOT(MySlot()));
那么你保证它只会发生一次。
澄清一下,通过调用 this 的静态版本而不是从现有计时器调用它,它只会发生一次。
这应该有效。
class MyObject
{
// ...
QTimer* mTimer;
}
MyObject::MyObject()
{
mTimer = new QTimer(this);
mTimer->setSingleShot(true);
connect(mTimer, SIGNAL(timeout()), SLOT(doStuff()));
}
MyObject::startOrResetTimer()
{
mTimer->start(1000);
}
您可以轻松地将singleShot()
静态成员函数与lambda一起使用:
QTimer::singleShot(2000, [=](){
qDebug()<<"do something after 2000 msec...";
});
Quick-and-dirty:在你的类中使用布尔值并在插槽中将其设置为 true;忽略后续调用,直到布尔值被重置。