【问题标题】:How to distinguish between pressed, released and long press when using QAbstractButton::autoRepeat使用 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() 信号。

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

【问题讨论】:

    标签: c++ linux qt button qt4.8


    【解决方案1】:

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

    【讨论】:

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