如何在Qt中定期调用函数?

How to call a function periodically in Qt?

提问人:CDT 提问时间:5/28/2013 最后编辑:CDT 更新时间:10/13/2022 访问量:24397

问:

是否可以使用 Qt 函数在 C++ 中定期调用函数?
定时函数设置为定时调用后如何停止呢?

C++ QT的

评论

7赞 cmannett85 5/29/2013
对于重复标记者:OP专门要求Qt解决方案,“重复”答案是通用的C++答案 - 它们不相同,这就是为什么接受的答案不相同。

答:

0赞 Sniper90 5/28/2013 #1

创建一个使用计时器功能的函数或一个 while 循环,该循环仅等待 100 毫秒,当您的函数满足要求时,只需中断。如果您只是在此处发布的所有其他问题中进行搜索,您可以很容易地找到解决方案。

2赞 user1095108 5/28/2013 #2

一种可能性是使用信号和插槽。连接两者和计时器。QTimertimeoutQObjectstart()

http://qt-project.org/doc/qt-4.8/qtimer.html#timeout

要停止计时器,请调用 。stop()

1赞 JBL 5/28/2013 #3

您可以使用 QTimer 类。

只需声明具有所需时间间隔的 a,将函数包装在 a 中作为插槽,然后将 的信号连接到您刚刚声明的插槽。QTimerQObjectQTimertimeout()

然后,当满足停止调用函数的条件时,只需调用 .QTimer::stop()

22赞 parkydr 5/28/2013 #4

如果你使用的是qt,你可以QTimer,它默认创建一个重复的计时器。

文档中有一个示例(如下所示)和一个示例(模拟时钟)。

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);

评论

2赞 LCsa 8/1/2018
实际上有原因将 创建为指针吗?我不能用吗?QTimernewQTimer timer(this);
3赞 parkydr 8/1/2018
在此示例中,计时器是在构造函数中创建的。如果您使用局部变量,则在构造结束时将超出范围,计时器将被销毁,因此不会运行timer
1赞 LCsa 8/1/2018
哦。。。即使 是班级的一员?QTimer
0赞 parkydr 8/2/2018
不,如果它是成员,它不会超出范围,因此可以正常工作。
2赞 SadeepDarshana 6/3/2019
@LCsa & parkydr 谢谢你!!!!!!!,你的第一条评论让我明白了我挣扎了 6 个小时的错误。不过与计时器无关。奇妙的巧合,我看到了这一点。
1赞 RobbieE 5/28/2013 #5

正如人们在我之前的回答中所说,您可以使用 timeout() 信号来触发函数运行。

如果你想在某个时候停止计时器,你可以连接到stop()插槽,或者直接自己调用它。