gpt4 book ai didi

c++ - 如何使用 Qtimer 添加 1 秒延迟

转载 作者:IT老高 更新时间:2023-10-28 22:23:00 28 4
gpt4 key购买 nike

我目前有一个方法如下

void SomeMethod(int a)
{

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

//After one sec
SomeOtherFunction(a);
}

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

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

最佳答案

实际上,对于您的问题,有一个更优雅的解决方案,不需要成员变量或队列。使用 Qt 5.4 和 C++11,您可以 run a Lambda expression right from the QTimer::singleShot(..) method !如果您使用的是 Qt 5.0 - 5.3,您可以使用连接方法到 connect the QTimer's timeout signal to a Lambda expression这将调用需要使用适当参数延迟的方法。

编辑:在 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);
}

关于c++ - 如何使用 Qtimer 添加 1 秒延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com