作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的端口通信程序。在应用程序的 GUI 端,我有一个带有 12 个按钮的面板,用于将信号发送到并行端口接口(interface)。与端口的通信已完成并正常工作。我现在需要的是按钮之间的自动切换。目标是启动一种屏幕保护程序,定期激活按钮并向端口发送信号。实际上,它看起来像这样:计时器启动 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();
在该自定义插槽中,启动连接到第二个自定义插槽的第二个非单次计时器
void YourThing::activateAutoClick() {
autoTimer->setInterval(5*1000);
autoTimer->setSingleShot(false);
connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick()));
autoTimer->start();
}
并在 autoClick
中执行您想要的向端口发送信号的操作。
要取消任一计时器,只需调用其 stop()
方法/槽即可。
要实现“屏幕保护程序”行为,请创建一个函数:
autoTimer->stop()
禁用自动点击activeTimerr->start(2*60*1000)
重新启动该计时器并在需要时调用该函数。您可以从已有的按钮插槽中执行此操作,或者重新实现事件处理程序,例如 QWidget
的 mouseMoveEvent
、keyPressedEvent
等。 (请务必阅读处理程序的文档,有些需要特定的准备。)
关于qt - 如何在Qt中发出一定间隔的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972478/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!