如何使用 Qtimer 添加 1 秒延迟

2024-05-13

我目前有一个方法如下

void SomeMethod(int a)
{

     //Delay for one sec.
     timer->start(1000);

     //After one sec
     SomeOtherFunction(a);
}

这个方法实际上是一个附加到信号上的槽。我想使用 Qtimer 添加一秒的延迟。但是我不确定如何实现这一点。由于计时器在完成时会触发一个信号,并且该信号需要附加到另一个不接受任何参数的方法。关于我如何完成这项任务有什么建议吗?

Update :信号在一秒内会被多次调用,延迟一秒。我的问题是将参数传递到附加到计时器的 timeout() 信号的插槽。 我的最后一种方法是将值存储在类的成员变量中,然后使用互斥体来保护它在使用变量时不被更改。但是我在这里寻找更简单的方法。


其实还有很多优雅的解决方案对于不需要成员变量或队列的问题。使用 Qt 5.4 和 C++11,您可以直接从以下位置运行 Lambda 表达式QTimer::singleShot(..) method http://doc.qt.io/qt-5/qtimer.html#singleShot-5!如果您使用的是 Qt 5.0 - 5.3,您可以使用 connect 方法将 QTimer 的超时信号连接到 Lambda 表达式 http://woboq.com/blog/cpp11-in-qt5.html它将使用适当的参数调用需要延迟的方法。

Edit:在 Qt 5.4 版本中,只需一行代码!

Qt 5.4(及更高版本)

void MyClass::SomeMethod(int a) {
  QTimer::singleShot(1000, []() { SomeOtherFunction(a); } );
}

Qt 5.0 - 5.3

void MyClass::SomeMethod(int a) {
  QTimer *timer = new QTimer(this);
  timer->setSingleShot(true);

  connect(timer, &QTimer::timeout, [=]() {
    SomeOtherFunction(a);
    timer->deleteLater();
  } );

  timer->start(1000);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Qtimer 添加 1 秒延迟 的相关文章

随机推荐