使用 QAbstractButton::autoRepeat 时如何区分按下、释放和长按

Posted

技术标签:

【中文标题】使用 QAbstractButton::autoRepeat 时如何区分按下、释放和长按【英文标题】:How to distinguish between pressed, released and long press when using QAbstractButton::autoRepeat 【发布时间】:2015-04-20 08:42:21 【问题描述】:

我在 Linux 上使用带有 X11 和/或 Qt-QWS 的 Qt 4.8.X 以及从 QAbstractButton 派生的自定义按钮。现在我必须区分按钮按下、释放和用户按住按钮。为此,我想按照in this question 的描述使用 QAbstractButton::autoRepeat。 正如QT Documentation 所述

如果启用了 autoRepeat,则以固定间隔发出 press()、release() 和 clicked() 信号。

那么,当所有三个信号一起发出时,我现在如何区分实际按下、按住和释放按钮?非常欢迎您的想法。谢谢和问候。

【问题讨论】:

【参考方案1】:

也许在这里使用 autoRepeat 不是最好的主意。我不知道你到底想做什么,但我的第一个猜测是让 autoRepeat 关闭。如果用户按下按钮,您会收到按下的信号。在该回调中,您可以启动一个计时器,该计时器以您想要的“自动重复”间隔触发。如果用户再次释放按钮(信号释放),您只需停止或终止计时器。

【讨论】:

这正是我目前用作解决方法的解决方案。但是当 QAbstractButton 提供了该功能时,为什么不使用它呢?令我困惑的是,最初的 QT 开发人员打算如何使用 autoRepeat... autoRepeat 在您的操作系统中执行类似于 key-repeat 的操作。如果长按退格键,会反复触发。 Windows 不关心当前触发器是第一个触发器还是第 2583 个触发器。它每次都会触发“删除最后一个字符”。与 QAbstractButton 自动重复相同。我认为您的用例不太匹配。 这听起来像是一个合理的解释。谢谢jwsc!

以上是关于使用 QAbstractButton::autoRepeat 时如何区分按下、释放和长按的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)