gpt4 book ai didi

qt - 如何在Qt中发出一定间隔的信号?

转载 作者:行者123 更新时间:2023-12-02 06:03:16 24 4
gpt4 key购买 nike

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

我的问题是:

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

最佳答案

使用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 等。 (请务必阅读处理程序的文档,有些需要特定的准备。)

关于qt - 如何在Qt中发出一定间隔的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com