如何在Qt中定时发射信号?

4
我正在编写一个简单的端口通信程序。在应用程序的GUI界面上,我有一个面板,其中包含12个按钮,这些按钮向并行端口接口发送信号。与端口的通信已经完成并且正常工作。现在我需要自动切换按钮。目标是启动一种屏幕保护程序,定期激活按钮并向端口发送信号。实际上,它看起来像这样:启动一个2分钟的计时器,如果发生任何事件,则重新启动计时器。否则,如果计时器达到timeout(),则发出qt信号,开始切换并以5秒的间隔自动click()按钮。
我的问题是:
  • 如何启用一个起始计时器,如果发生任何键盘/鼠标事件,则将其重置?
  • 如何定义按钮之间的过渡,并设置休眠时间?
1个回答

7
使用QTimer进行定时操作。
对于类似于“屏幕保护程序”的情况,创建一个一次性的计时器,并将其连接到您自己的自定义插槽,将其间隔设置为两分钟。
activeTimer = new QTimer(this);
activeTimer->setInterval(2*60*1000);
activeTimer->setSingleShot(true);
connect(activeTimer, SIGNAL(timeout()), this, SLOT(activateAutoClick()));
activeTimer->start();

在那个自定义插槽中,启动一个第二个非单次触发的定时器,连接到第二个自定义插槽。
void YourThing::activateAutoClick() {
  autoTimer->setInterval(5*1000);
  autoTimer->setSingleShot(false);
  connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick()));
  autoTimer->start();
}

autoClick中,您可以执行任何向端口发送信号的操作。

要取消任意一个计时器,只需调用其stop()方法/插槽即可。

要实现“屏幕保护程序”行为,请创建一个函数:

  1. 调用autoTimer->stop()以禁用自动点击
  2. 调用activeTimerr->start(2 * 60 * 1000)以重新启动计时器

并在需要时调用该函数。您可以从按钮的已有插槽或重新实现事件处理程序(例如QWidgetmouseMoveEventkeyPressedEvent 等)中执行此操作。(请务必阅读处理程序的文档,一些处理程序需要特定的准备工作。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接