我正在写一个简单的端口通信程序.在应用程序的GUI端,我有一个带有12个按钮的面板,可以向并行端口接口发送信号.与端口的通信已完成并正常工作.我现在需要的是按钮之间的自动切换.目标是启动一种屏幕保护程序,它将定期激活按钮并向端口发送信号.在实践中,它看起来像这样:计时器启动2分钟,如果发生任何事件,它将重新启动.否则,如果计时器到达timeout()
qt信号,则开始切换并且按钮click()
以5秒的间隔自动进行.
我的问题是:
使用QTimer
的计时部.
对于类似"屏幕保护程序"的计时器,创建一个单次计时器,将其连接到您的自定义插槽,并将其间隔设置为两分钟.
activeTimer = new QTimer(this);
activeTimer->setInterval(2*60*1000);
activeTimer->setSingleShot(true);
connect(activeTimer, SIGNAL(timeout()), this, SLOT(activateAutoClick()));
activeTimer->start();
Run Code Online (Sandbox Code Playgroud)
在该自定义插槽中,启动连接到第二个自定义插槽的第二个非单次定时器
void YourThing::activateAutoClick() {
autoTimer->setInterval(5*1000);
autoTimer->setSingleShot(false);
connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick()));
autoTimer->start();
}
Run Code Online (Sandbox Code Playgroud)
并且在向您的端口发送信号方面做任何您想做的事情autoClick
.
要取消任一计时器,只需调用他们的stop()
方法/插槽.
要实现"屏幕保护程序"行为,请创建一个函数:
autoTimer->stop()
禁用自动点击activeTimerr->start(2*60*1000)
重新启动那个并在需要时调用该函数.你可以做到这一点从已有的插槽,你的按钮,或重新实现事件处理程序一样QWidget
的mouseMoveEvent
,keyPressedEvent
和这样的.(请务必阅读处理程序的文档,有些需要特殊准备.)