2011-08-07 39 views
4

我正在写一个简单的端口通信程序。在应用程序的GUI一侧,我有一个带有12个按钮的面板,可将信号发送到并行端口接口。与港口的沟通已经完成并正在进行中。我现在需要的是按钮之间的自动切换。目标是开始一种屏幕保护程序,它会周期性地激活按钮并发送信号到端口。实际上,它看起来像这样:一个计时器启动2分钟,如果发生任何事件,它将重新启动。否则,如果计时器到达timeout() qt信号被发射,开关开始并且按钮以5秒的间隔自动地被编辑。如何以Qt间隔发射信号?

我的问题是:

  • 如何启用如果任意键/鼠标事件发生时将先复位出发计时器?
  • 如何定义具有睡眠间隔的按钮之间的转换?

回答

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)重新启动一个

,并调用该函数只要需要。您可以从已有的按钮插槽或重复事件处理程序(如QWidgetmouseMoveEvent,keyPressedEvent等)中执行此操作。 (请务必阅读处理程序的文档,有些需要特殊准备。)