如何以Qt的间隔发出信号?

时间:2011-08-07 11:24:59

标签: qt events timer

我正在编写一个简单的端口通信程序。在应用程序的GUI端,我有一个带有12个按钮的面板,可以向并行端口接口发送信号。与端口的通信已完成并正常工作。我现在需要的是按钮之间的自动切换。目标是启动一种屏幕保护程序,它将定期激活按钮并向端口发送信号。在实践中它看起来像这样:计时器启动2分钟,如果发生任何事件,它将重新启动。否则,如果计时器达到timeout(),则发出qt信号,开始切换,按钮自动click(),间隔为5秒。

我的问题是:

  • 如果发生任何键/鼠标事件,如何启用将重置的启动计时器?
  • 如何定义具有休眠间隔的按钮之间的转换?

1 个答案:

答案 0 :(得分:6)

使用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)重新启动该
  3. 并在需要时调用该函数。您可以从已有的按钮插槽执行此操作,也可以重新实现事件处理程序,例如QWidgetmouseMoveEventkeyPressedEvent等。 (请务必阅读处理程序的文档,有些需要特殊准备。)