1

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

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

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

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

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

btn->setAttribute(Qt::WA_AcceptTouchEvents);

qApplication.setAttribute(Qt::AA_SynthesizeMouseForUnhandledTabletEvents);

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

我在我的 Ubuntu 机器上使用MXE. Qt 版本是 5.12。

4

1 回答 1

1

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

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

如果行为对于 QToolButton 类是不可接受的,您可以选择对其进行子类化并在您认为合适的时候处理触摸事件,同时覆盖鼠标事件,以避免同时处理合成事件。

于 2019-09-17T12:32:16.647 回答