有没有办法让MacOS将鼠标事件转换为触摸事件?



我有一台macOS 10.15.7的Mac。我也有这个触摸屏连接到它:https://www.usa.philips.com/c-p/242B9T_27/monitor-lcd-monitor-with-smoothtouch

我试着从这些家伙那里安装一个通用驱动程序https://www.touch-base.com/(试用版-所以他们不支持。)。

触摸屏工作,但它将屏幕触摸转换为鼠标事件。我使用这个来自Qt的示例项目来验证:https://code.qt.io/cgit/qt/qtbase.git/tree/examples/widgets/touch/fingerpaint?h=6.3

有没有办法让MacOS将鼠标事件转换为触摸事件?如果失败,是否有办法拦截Qt mouseEvents并将它们转换为触摸事件?还是有人认识更好的司机?——我找不到。

自己处理Qt事件并不是一个好主意。它似乎没有为你做触摸事件的原因是因为你必须在Qt应用程序中显式地启用它。

详情请参阅下一页

要接收触摸事件,小部件必须具有Qt::WA_AcceptTouchEvents属性集和图形项需要有

将acceptTouchEvents属性设置为true。

然后,你可以重新实现QObject::event(QEvent *e)。

你可以在这里找到事件类型,你也可以在这里找到要处理的触摸事件类型。

QEvent::TouchBegin触摸屏或序列的开始触控板事件(QTouchEvent).

QEvent::TouchCancel取消触摸事件序列(QTouchEvent).

QEvent::TouchEnd触摸事件序列(QTouchEvent)的结束。

QEvent::TouchUpdate触摸屏事件(QTouchEvent).

那么,为了把这些都付诸实践,你可以这样写:

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
...
setAttribute(Qt::WA_AcceptTouchEvents);
...
}

或者只是在类定义之外:

myWidget->setAttribute(Qt::WA_AcceptTouchEvents);

然后你实际处理触摸事件:

bool MyWidget::event(QEvent* event)
{
switch (event->type()) {
case QEvent::TouchUpdate:
// Handle
break;
default:
break;

}
return QObject::event(event);
}

相关内容

  • 没有找到相关文章

最新更新