【问题标题】:QToolButton Remain Pressed after finger has been removed from Touchscreen手指从触摸屏上移开后 QToolButton 保持按下状态
【发布时间】:2019-09-17 09:06:11
【问题描述】:

我有一个小的Qt 桌面应用程序(C++ 中),我需要让它在运行Window 10 的触摸屏设备中工作。该设备具有触摸屏,应用程序可与键盘和鼠标完美配合。

我不是开发Qt 应用程序的专家,这就是为什么无法解决这个问题可能是愚蠢的问题。

但是,当我尝试使用触摸屏时,即使我将手指从触摸屏上移开,并且当我触摸其他地方时,最后一次触摸的 QToolbutton 仍保持按下状态,然后该 QToolButton 被释放。

我希望 Qtoolbutton 的行为就像使用鼠标按下它时一样。一旦我将手指从触摸屏上移开,它就会松开。

我尝试使用以下方法解决此问题:

btn->setAttribute(Qt::WA_AcceptTouchEvents);

还有

qApplication.setAttribute(Qt::AA_SynthesizeMouseForUnhandledTabletEvents);

但这没有帮助。我认为我遗漏了一个非常小的问题,之后 Qt 将自行处理所有与触摸相关的事件并显示正确的行为。

我在我的 Ubuntu 机器上使用 MXE 进行交叉编译。 Qt 版本是 5.12。

【问题讨论】:

    标签: qt touchscreen qtoolbutton


    【解决方案1】:

    我认为我遗漏了一个非常小的问题,之后 Qt 将自行处理所有与触摸相关的事件并显示正确的行为。

    QWidget 子类,包括 QToolButton,不自己处理触摸事件。 Qt 甚至不需要模拟鼠标事件。您在应用程序中看到由 Windows 合成的模拟鼠标事件的效果。这使得设计用于鼠标的古老 Windows 程序可以在现代触控 Windows 平板电脑上运行。但是鼠标模拟并不完美。

    如果 QToolButton 类的行为不可接受,您可以选择对其进行子类化并根据需要处理触摸事件,同时覆盖鼠标事件,以避免同时处理合成事件。

    【讨论】:

    • 你有示例代码吗?我只想处理触摸事件并保持鼠标事件不变。
    • 不适用于 QToolButton 甚至 QWidget,但您可能希望查看我的 VMPK 触摸事件实现here
    • 如果我收到触摸事件,我应该发出鼠标事件吗?
    • 我不这么认为。您可以直接调用从QAbstractButtonQToolButton 继承的任何公共或受保护方法。而且我会忽略合成的鼠标事件,以避免调用其中的两次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多